【问题标题】:Large number of subplots with matplotlibmatplotlib 的大量子图
【发布时间】:2012-11-02 04:04:15
【问题描述】:

我想用 Python matplotlib 创建包含许多 (100) 个子图的图。我找不到合适的语法:

我想要类似的东西(这不起作用)

plt.subplot(10,10,i,X1, Y) 

在 i 从 0 到 99 的循环中,然后

plt.show()

许多教程中都提供了语法,以应对只有少数子图的情况。那么,语法可以是

plt.close('all')
fig = plt.figure()

ax1 = plt.subplot(221)
ax2 = plt.subplot(223)
ax3 = plt.subplot(122)

example_plot(ax1)
example_plot(ax2)
example_plot(ax3)

plt.tight_layout()

code is from here.

对于我的问题,我想我不能使用相同的语法,因为我会使用 plt.subplot(10101) 等,我不明白。

你有解决办法吗?

谢谢

【问题讨论】:

    标签: python graphics plot matplotlib subplot


    【解决方案1】:

    这是一个完整的代码解决方案,它显示了事物是如何编号的,因为看起来人们仍然会来看这里:

    columns = 10
    rows = 4
    fig, ax_array = plt.subplots(rows, columns,squeeze=False)
    for i,ax_row in enumerate(ax_array):
        for j,axes in enumerate(ax_row):
            axes.set_title('{},{}'.format(i,j))
            axes.set_yticklabels([])
            axes.set_xticklabels([])
    #         axes.plot(you_data_goes_here,'r-')
    plt.show()
    

    哪个输出这个来告诉你编号是如何工作的(我只做了 4 行而不是 10 以使图片更小,只需将“行”更改为 10 以获得 10 行子图):

    编号向您显示每个位置的 i 和 j 值,以便您可以在 matplotlib 子图数组中按照您想要的方式排列。这将在数​​组中包含您想要的任何布局的子图。

    【讨论】:

    • 我知道这很古老,但是如果您将行或列设置为 1,代码将失败,因为没有可迭代的内容。
    • @Mr.Fegur - 一个足够公平的点,尽管整个点显示了一个大数组。希望人们可以看到如何消除不需要的循环,如果他们愿意,你想要一个例子吗?
    • 也许编辑您的答案以在 plt.subplots 中包含squeeze='False' 选项将使答案处理columns/row=1 的情况。
    • @Mr.Fegur - 已添加。我从来没有机会使用它,谢谢你指点我。整洁!
    • 查看这里为所有子图设置一个色阶:stackoverflow.com/questions/13784201/…
    【解决方案2】:

    如果您尝试生成约 100 个子图,实际上您可能需要执行类似 this 的操作,这样运行速度会更快。您放弃了单独的轴标签,但有 100 个子图,除非您制作 huge 打印输出,否则您将无法读取标签。

    【讨论】:

      【解决方案3】:

      试试这个:

      fig, ax = plt.subplots(10, 10)
      

      其中 ax 将在一个列表中包含一百个轴。

      这是一个非常方便的功能,来自the docs

      Definition: plt.subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True, subplot_kw=None, **fig_kw)
      Create a figure with a set of subplots already made.
      
      This utility wrapper makes it convenient to create common layouts of
      subplots, including the enclosing figure object, in a single call.
      

      【讨论】:

        【解决方案4】:

        你的例子几乎是正确的。请使用:

        for i in range(100):
            ax = plt.subplot(10,10,i)
            ax.plot(...)
        

        【讨论】:

          猜你喜欢
          • 2015-07-15
          • 1970-01-01
          • 2017-11-14
          • 2015-08-15
          • 2021-08-05
          • 2017-03-01
          • 1970-01-01
          相关资源
          最近更新 更多