有没有办法让这个子情节看起来写得更少?
Is there a way to achieve this subplot look writing less?
我正在尝试学习一些 python 并且我尝试绘制一些数据。当然,我能够做到,但是为了实现我想要的外观,我添加了太多代码。我想有一种方法可以更简单地做到这一点。
我想做的是
- 为所有子图设置相同的 x 轴限制
- 移除绘图框,仅保留 x 轴
为了实现这个我不得不写下所有这些
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(10,10))
axes[0, 0].plot(data1['Hz'], data1['int_n'])
axes[0, 1].plot(data2['Hz'], data2['int_n'])
axes[1, 0].plot(data3['Hz'], data3['int_n'])
axes[1, 1].plot(data4['Hz'], data4['int_n'])
axes[0, 0].set_xlim(100, 20)
axes[0, 1].set_xlim(100, 20)
axes[1, 0].set_xlim(100, 20)
axes[1, 1].set_xlim(100, 20)
axes[0, 0].set_title('Sample 1')
axes[0, 1].set_title('Sample 2')
axes[1, 0].set_xlabel('Hz')
axes[1, 1].set_xlabel('Hz')
axes[0, 0].set_ylabel('Experiment 1')
axes[1, 0].set_ylabel('Experiment 2')
axes[0, 0].get_yaxis().set_ticks([])
axes[0, 1].get_yaxis().set_ticks([])
axes[1, 0].get_yaxis().set_ticks([])
axes[1, 1].get_yaxis().set_ticks([])
axes[0, 0].spines['right'].set_visible(False)
axes[0, 0].spines['top'].set_visible(False)
axes[0, 0].spines['left'].set_visible(False)
axes[0, 1].spines['right'].set_visible(False)
axes[0, 1].spines['top'].set_visible(False)
axes[0, 1].spines['left'].set_visible(False)
axes[1, 0].spines['right'].set_visible(False)
axes[1, 0].spines['top'].set_visible(False)
axes[1, 0].spines['left'].set_visible(False)
axes[1, 1].spines['right'].set_visible(False)
axes[1, 1].spines['top'].set_visible(False)
axes[1, 1].spines['left'].set_visible(False)
fig.tight_layout()
我想有一种简单的方法可以用更少的文本来完成,但我不知道该怎么做
您可以在 axes
的扁平化实例上使用 for 循环。为了使事情变得更简单,您还可以使用 zip
并同时迭代 data
实例。例如:
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(10,10))
for ax, data in zip(axes.flat, (data1, data2, data3, data4)):
# Do these to all axes instances
ax.plot(data['Hz'], data['int_n'])
ax.set_xlim(100, 20)
ax.get_yaxis().set_ticks([])
# loop over the spines we want to turn off
for spine in ['right', 'top', 'left']:
ax.spines[spine].set_visible(False)
# These things only apply to one or two axes, so are outside the loop
axes[0, 0].set_title('Sample 1')
axes[0, 1].set_title('Sample 2')
axes[1, 0].set_xlabel('Hz')
axes[1, 1].set_xlabel('Hz')
axes[0, 0].set_ylabel('Experiment 1')
axes[1, 0].set_ylabel('Experiment 2')
fig.tight_layout()
我正在尝试学习一些 python 并且我尝试绘制一些数据。当然,我能够做到,但是为了实现我想要的外观,我添加了太多代码。我想有一种方法可以更简单地做到这一点。
我想做的是
- 为所有子图设置相同的 x 轴限制
- 移除绘图框,仅保留 x 轴
为了实现这个我不得不写下所有这些
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(10,10))
axes[0, 0].plot(data1['Hz'], data1['int_n'])
axes[0, 1].plot(data2['Hz'], data2['int_n'])
axes[1, 0].plot(data3['Hz'], data3['int_n'])
axes[1, 1].plot(data4['Hz'], data4['int_n'])
axes[0, 0].set_xlim(100, 20)
axes[0, 1].set_xlim(100, 20)
axes[1, 0].set_xlim(100, 20)
axes[1, 1].set_xlim(100, 20)
axes[0, 0].set_title('Sample 1')
axes[0, 1].set_title('Sample 2')
axes[1, 0].set_xlabel('Hz')
axes[1, 1].set_xlabel('Hz')
axes[0, 0].set_ylabel('Experiment 1')
axes[1, 0].set_ylabel('Experiment 2')
axes[0, 0].get_yaxis().set_ticks([])
axes[0, 1].get_yaxis().set_ticks([])
axes[1, 0].get_yaxis().set_ticks([])
axes[1, 1].get_yaxis().set_ticks([])
axes[0, 0].spines['right'].set_visible(False)
axes[0, 0].spines['top'].set_visible(False)
axes[0, 0].spines['left'].set_visible(False)
axes[0, 1].spines['right'].set_visible(False)
axes[0, 1].spines['top'].set_visible(False)
axes[0, 1].spines['left'].set_visible(False)
axes[1, 0].spines['right'].set_visible(False)
axes[1, 0].spines['top'].set_visible(False)
axes[1, 0].spines['left'].set_visible(False)
axes[1, 1].spines['right'].set_visible(False)
axes[1, 1].spines['top'].set_visible(False)
axes[1, 1].spines['left'].set_visible(False)
fig.tight_layout()
我想有一种简单的方法可以用更少的文本来完成,但我不知道该怎么做
您可以在 axes
的扁平化实例上使用 for 循环。为了使事情变得更简单,您还可以使用 zip
并同时迭代 data
实例。例如:
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(10,10))
for ax, data in zip(axes.flat, (data1, data2, data3, data4)):
# Do these to all axes instances
ax.plot(data['Hz'], data['int_n'])
ax.set_xlim(100, 20)
ax.get_yaxis().set_ticks([])
# loop over the spines we want to turn off
for spine in ['right', 'top', 'left']:
ax.spines[spine].set_visible(False)
# These things only apply to one or two axes, so are outside the loop
axes[0, 0].set_title('Sample 1')
axes[0, 1].set_title('Sample 2')
axes[1, 0].set_xlabel('Hz')
axes[1, 1].set_xlabel('Hz')
axes[0, 0].set_ylabel('Experiment 1')
axes[1, 0].set_ylabel('Experiment 2')
fig.tight_layout()