在循环中在Matplotlib中创建子图?

dar*_*dog 4 python matplotlib pandas ipython-notebook

我正在使用这个代码,它提供了一个接一个的好图(使用IPython-notebook&Pandas)

for subsm in subsl:
    H7, subsm = sumsubdesc2(table, subsm)   
    ax1=H7.plot()
    plt.title('Rolling 4q mean %s'%(subsm))
    ax1.set_title('Rolling 4q mean %s'%(subsm))
    ax1.set_ylim(100000,600000)
Run Code Online (Sandbox Code Playgroud)

我想让下一个旁边共有3个"2up",总共3行(5个子图)无法弄清楚如何处理,因为所有的子图示例似乎都是用于对数据或特定图表进行子绘图以及特定网格布局.

所以我不知道如何创建主要情节,然后将一些图表(在这种情况下为5)分别绘制为标题为二次?

编辑第二行代码,因为我省略了函数调用;-(

Phi*_*oud 6

这是你需要做的:

import math
import matplotlib.pylab as plt

nrows = int(math.ceil(len(subsl) / 2.))

fig, axs = plt.subplots(nrows, 2)

ylim = 100000, 600000
for ax, subsm in zip(axs.flat, subsl):
    H7, subsm = sumsubdesc2(table, subsm)
    H7.plot(ax=ax, title='Rolling 4q mean %s' % subsm)
    ax.set_ylim(ylim)
Run Code Online (Sandbox Code Playgroud)

即使axs.size > len(subsl)StopIteration最短的可迭代用完后引发,这也会起作用.请注意,它axs.flat行顺序展axs数组的迭代器.

要隐藏未显示的最后一个绘图,请执行以下操作:

axs.flat[-1].set_visible(False)
Run Code Online (Sandbox Code Playgroud)

更一般地说,对于axs.size - len(subsl)网格末尾的额外图表,请执行以下操作:

for ax in axs.flat[axs.size - 1:len(subsl) - 1:-1]:
    ax.set_visible(False)
Run Code Online (Sandbox Code Playgroud)

这片看起来有点粗糙,所以我会解释一下:

该数组axsaxs.size元素.扁平版本的最后一个元素的索引axsaxs.size - 1.subsllen(subsl)元素和相同的推理适用于最后一个元素的索引.但是,我们需要从最后一个元素搬回axs到最后绘制的,所以我们需要一步-1元.