在 4×n 网格中绘制和共享 y 轴
Subplot and share y-axis in a 4-by-n grid
我正在尝试定义一个可以在 4×n 网格中绘制子图的函数。下面的代码有效,但我想让子图共享 y 轴,我想我(肯定?)必须使用 中提到的方法。但是,因为我正在做一个 4×n 的网格并且我正在做一个循环,所以为每个子图分配一个名称对我来说似乎很麻烦。有任何想法吗?提前致谢!
目前我的函数如下所示:
def make_plots(df, name_list):
n = len(name_list)
j = 1
plt.figure(1, dpi=500, figsize=(10,10/4*n/4))
for i in name_list:
plt.subplot(n/4,4,j)
plt.title('Table {}: {}'.format(j,i), size='xx-small')
plt.grid(False)
a = [i for i in list(df[i]) if i>0]
plt.hist(a,bins=7,rwidth=0.7)
plt.axvline(x=np.mean(a), color='red')
j+=1
plt.tight_layout(pad=0.2,h_pad=0.2, w_pad=0.2)
plt.show()
您可以先创建图形和子图,然后使用 sharey = True
参数。然后使用 zip
同时遍历 name_list
和 axes
数组:
def make_plots(df, name_list):
n = len(name_list)
j = 1
fig, axes = plt.subplots(n/4, 4, sharey=True, figsize=(10, 10/4*n/4))
for i, ax in zip(name_list, axes.flatten()):
ax.set_title('Table {}: {}'.format(j,i), size='xx-small')
ax.grid(False)
a = [i for i in list(df[i]) if i>0]
ax.hist(a,bins=7,rwidth=0.7)
ax.axvline(x=np.mean(a), color='red')
j+=1
plt.tight_layout(pad=0.2,h_pad=0.2, w_pad=0.2)
plt.show()
我正在尝试定义一个可以在 4×n 网格中绘制子图的函数。下面的代码有效,但我想让子图共享 y 轴,我想我(肯定?)必须使用
目前我的函数如下所示:
def make_plots(df, name_list):
n = len(name_list)
j = 1
plt.figure(1, dpi=500, figsize=(10,10/4*n/4))
for i in name_list:
plt.subplot(n/4,4,j)
plt.title('Table {}: {}'.format(j,i), size='xx-small')
plt.grid(False)
a = [i for i in list(df[i]) if i>0]
plt.hist(a,bins=7,rwidth=0.7)
plt.axvline(x=np.mean(a), color='red')
j+=1
plt.tight_layout(pad=0.2,h_pad=0.2, w_pad=0.2)
plt.show()
您可以先创建图形和子图,然后使用 sharey = True
参数。然后使用 zip
同时遍历 name_list
和 axes
数组:
def make_plots(df, name_list):
n = len(name_list)
j = 1
fig, axes = plt.subplots(n/4, 4, sharey=True, figsize=(10, 10/4*n/4))
for i, ax in zip(name_list, axes.flatten()):
ax.set_title('Table {}: {}'.format(j,i), size='xx-small')
ax.grid(False)
a = [i for i in list(df[i]) if i>0]
ax.hist(a,bins=7,rwidth=0.7)
ax.axvline(x=np.mean(a), color='red')
j+=1
plt.tight_layout(pad=0.2,h_pad=0.2, w_pad=0.2)
plt.show()