python - 在 4×n 网格中绘制子图并共享 y 轴

标签 python matplotlib subplot

我正在尝试定义一个可以在 4×n 网格内绘制子图的函数。下面的代码可以工作,但我想让子图共享 y 轴,我认为我(肯定?)必须使用 this post 中提到的方法。然而,因为我正在做一个 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_listaxes 数组:

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()

关于python - 在 4×n 网格中绘制子图并共享 y 轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50459174/

相关文章:

python - 对于 X 秒,每 Y 秒做一些 Action

matplotlib - matplotlib radviz 中的关键字参数

python - 使用开放式字体和 pdf 导出在 Matplotlib 中进行字体缩放

matlab - 我可以在一个循环内的多个 Matlab 图形中制作多个子图吗?

python - CentOS 7 上的 Python 3 上没有模块 'yum'

python - Python 中的“For”循环行为

python - 优化 DOM 解析以使用更少的内存

python - 从数据透视表绘制 Pandas DataFrame

python - 在子图之外放置多个颜色条 (matplotlib)

python - 每行共享 y 轴