如何使用matplotlib获取包含多个图形的多个窗口?

时间:2019-01-15 15:09:15

标签: python python-3.x pandas matplotlib pandas-groupby

我有200种产品,我想绘制time vs parameter图。我想出了一个代码,可以绘制20种产品的图形并将其显示在一个窗口中。

我想知道是否可以在10个不同的窗口中绘制200个图形作为子图,每个窗口每个包含20个图形。

我的代码

grouped = dataset.groupby('product_number')
ncols = 4
nrows = int(np.ceil(grouped.ngroups/40))
fig, axes = plt.subplots(figsize=(12,4), nrows = nrows, ncols = ncols)

for (key, ax) in zip(grouped.groups.keys(), axes.flatten()):
    grouped.get_group(key).plot(x='TimeElapsed', y='StepID', ax=ax, sharex = True, sharey = True)
    ax.set_title('product_number=%d'%key)
ax.legend()
plt.show()

此代码为我提供了一个包含20个子图的窗口,如下所示

enter image description here

1 个答案:

答案 0 :(得分:1)

您只需要将现有代码包装在for循环中,即可遍历每个包含20个子图的不同图形。然后,这里的技巧是使用索引(20*i)+key修改键值以获取所有200个键。对于i=0(第一位数字),您将获得1、2、3,... 19、20。对于i=1(第二位数字),您将获得21、22、23,... 39、40等。

下面是代码的修改版本。我没有数据,所以无法尝试。如果它不起作用,请告诉我。正如@DavidG指出的那样,plt.show()应该在for循环之外。

grouped = dataset.groupby('product_number')
ncols = 4
nrows = int(np.ceil(grouped.ngroups/40))

for i in range(10):
    fig, axes = plt.subplots(figsize=(12,4), nrows = nrows, ncols = ncols)

    for (key, ax) in zip(grouped.groups.keys(), axes.flatten()):
        grouped.get_group((20*i)+key).plot(x='TimeElapsed', y='StepID', ax=ax, sharex = True, sharey = True)
        ax.set_title('product_number=%d'%((20*i)+key))
    ax.legend()
plt.show() # Mind the indentation