Python 在循环中的Matplotlib中创建子地块?
我正在使用这段代码,它一个接一个地提供漂亮的绘图(使用IPython笔记本和熊猫) 我想让3行(共5个子图)的图“2up”一个接一个地显示出来,但我不知道如何处理,因为所有子图示例似乎都是用于数据子图或特定图和特定网格布局 所以,我不知道如何创建主情节,然后再细分一些标题为两个以上的图(在本例中为5)Python 在循环中的Matplotlib中创建子地块?,python,matplotlib,pandas,ipython-notebook,Python,Matplotlib,Pandas,Ipython Notebook,我正在使用这段代码,它一个接一个地提供漂亮的绘图(使用IPython笔记本和熊猫) 我想让3行(共5个子图)的图“2up”一个接一个地显示出来,但我不知道如何处理,因为所有子图示例似乎都是用于数据子图或特定图和特定网格布局 所以,我不知道如何创建主情节,然后再细分一些标题为两个以上的图(在本例中为5) 编辑代码的第二行,因为我忽略了函数调用-(我不确定,但我想你问的是 # not tested import math import matplotlib.pylab as plt Nrows =
编辑代码的第二行,因为我忽略了函数调用-(我不确定,但我想你问的是
# 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))
我不知道你所说的“两个以上的标题”是什么意思。以下是你需要做的:
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)
也可以,因为StopIteration
在最短iterable用完时被提升。请注意,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)
那片看起来有点粗糙,所以我会解释:
数组
axs
具有axs.size
元素。展平版本axs
的最后一个元素的索引为axs.size-1
subsl
具有len(subsl)
元素,同样的推理也适用于最后一个元素的索引。但是,我们需要从axs的最后一个元素返回到最后一个绘制的元素,因此我们需要一步一步地执行-1。您知道子批次的数量吗?或者您的绘图应该动态增长吗?我想要一个动态的解决方案,尽管在特定的I尽管我确实知道我有5张图表,好的,让我试一试。但我想使用变量('Rolling 4q mean%s'(subsm))将标题与每个图表实例关联。我对上述函数调用的编辑搞砸了,我的问题仍然停留在如何循环上。@dartdog。我编辑我的回答是为了做我认为你在问的事情(并修复一个bug)。不知道如何合并:H7,subsm=sumsubdesc2(table,subsm)ax1=H7.plot()@dartdog我修改了它,以便使用sumsubdesc2函数为每个循环计算subsm(我记得这不在原始代码中)。我不太确定函数的作用,所以这是我对什么会起作用的最好猜测。@dartdog我不理解你的评论。很抱歉,在3 fig上出现了一个错误,axs=plt。子图(nrows,2,sharey=True)>>>范围()应为整数结束参数,得到浮点值。下面的答案给了我一个不错的结果,但它已将x轴从0-70重新标记,而不是像直接打印时那样使用日期?只需要将math.ceil
的结果强制为int
(仅供参考,仅在Python 2中)是这样的,我甚至有x轴上的年份,我有一个空白图表在结尾,有什么办法删除它吗?
for ax in axs.flat[axs.size - 1:len(subsl) - 1:-1]:
ax.set_visible(False)