4

我正在使用这段代码,它提供了一个接一个的漂亮图(使用 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)

我想让情节“2up”一个挨着下一个,总共 3 行(5 个子图)无法弄清楚如何处理,因为所有子图示例似乎都是用于对数据或特定图进行子图和特定的网格位置。

所以我不知道如何创建主图,然后将多个图(在本例中为 5 个)与标题为二合一?

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

4

2 回答 2

8

这是您需要做的:

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)

即使在最短的迭代用完时引发axs.size > len(subsl)since ,这也将起作用。StopIteration请注意,这是对行顺序展平数组axs.flat的迭代器。axs

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

axs.flat[-1].set_visible(False)

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

for ax in axs.flat[axs.size - 1:len(subsl) - 1:-1]:
    ax.set_visible(False)

那个切片看起来有点粗糙,所以我将解释:

数组axsaxs.size元素。的展平版本的最后一个元素的索引axsaxs.size - 1subsllen(subsl)元素,同样的推理适用于最后一个元素的索引。但是,我们需要从最后一个元素移动axs到最后一个绘制的元素,所以我们需要逐步 -1。

于 2013-09-19T21:41:48.673 回答
1

我不确定,但我想你要问的是

# not tested
import math
import matplotlib.pylab as plt

Nrows = math.ceil(len(subsl) / 2.)
for i in range(len(subsl)):
    subsm = subsl[i]
    H7, subsm = sumsubdesc2(table, subsm) 
    plt.subplot(Nrows, 2, i+1)

    # do some plotting

    plt.title('Rolling 4q mean %s'%(subsm))

我不确定你所说的“两个人的头衔”是什么意思。

于 2013-09-19T18:09:07.153 回答