Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在循环中的Matplotlib中创建子地块?_Python_Matplotlib_Pandas_Ipython Notebook - Fatal编程技术网

Python 在循环中的Matplotlib中创建子地块?

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 =

我正在使用这段代码,它一个接一个地提供漂亮的绘图(使用IPython笔记本和熊猫)

我想让3行(共5个子图)的图“2up”一个接一个地显示出来,但我不知道如何处理,因为所有子图示例似乎都是用于数据子图或特定图和特定网格布局

所以,我不知道如何创建主情节,然后再细分一些标题为两个以上的图(在本例中为5)


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

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

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