Matplotlib中的子图使用直方图

3
diff  = [[10,20,30],[40,50,60],[70,80,90]]
comp = ["foo","bar","baz"]
fig,ax = plt.subplots()
for foo in range(0, len(diff)):
        x = [diff[foo]]
        name = comp
        color = ['0.1', '0.2', '0.3']
        label = ['1000000','1200000', '1400000']
        y = zip(*x)
        pos = np.arange(len(x))
        width = 1. / (1 + len(x))

        fig = plt.subplot(3,1,foo)
        for idx, (serie, color,label) in enumerate(zip(y, color,label)):
                ax.bar(pos + idx * width, serie, width, color=color,label=label)
        fig = plt.gcf()
        fig.set_size_inches(28.5,10.5)

        ax.set_xticks(pos + 1.5*width)
        plt.ylabel(name[foo])
        ax.set_xticklabels(comp)
        ax.legend()
        plt.gray()
plt.savefig("file" + '.jpg', bbox_inches='tight', pad_inches=0.5,dpi=100)
plt.clf()

我想在图中添加foo bar 和 baz的子图。但是,当我尝试使用上面的代码时,数据没有显示在图表上。有任何想法为什么?


我发现了一个非常不好的捷径,我不喜欢。使用Montage来合并图像。 :)就像这样montage -geometry 500 image1 image2 [...] output - pistal
你已经两次调用了 subplots:一次是在循环之前没有参数的情况下,这将创建一个只有一个轴的图形,但是在循环中你再次使用 (3,1, ...) 调用它。你需要将第二次调用移到顶部,然后在三个轴中每个轴上绘制一次。 - askewchan
1个回答

2

在循环中调用subplot时,你正在替换第一个fig,这里是修复后的版本。请注意,subplots返回的ax是一个np.ndarray,因此您必须给出索引ax[foo]才能获得AxesSubplot对象。

diff  = [[10, 20, 30], [40, 50, 60], [70, 80, 90]]
comp = ["foo", "bar", "baz"]
fig, ax = plt.subplots(3, 1)
for foo in range(0, len(diff)):
        x = [diff[foo]]
        name = comp
        color = ['0.1', '0.2', '0.3']
        label = ['1000000', '1200000', '1400000']
        y = zip(*x)
        pos = np.arange(len(x))
        width = 1. / (1 + len(x))
        for idx, (serie, color,label) in enumerate(zip(y, color,label)):
                ax[foo].bar(pos + idx * width, serie, width, color=color,label=label)
        fig.set_size_inches(28.5, 10.5)
        ax[foo].set_xticks(pos + 1.5*width)
        plt.ylabel(name[foo])
        ax[foo].set_xticklabels(comp)
        ax[foo].legend()
        plt.gray()
fig.savefig("file" + '.jpg', bbox_inches='tight', pad_inches=0.5, dpi=100)
plt.clf()

为什么你要在循环中每次都调用 gcf() 并调整图形大小?你应该使用 fig.savefig(...) 而不是 plt.savefig - tacaswell
@tcaswell 谢谢!我刚刚从原帖中复制了代码并修复了问题,但没有足够的注意力... - Saullo G. P. Castro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接