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

I want to subplot foo bar and baz. But when I try to do that using the above code. The data is not being displayed on the graph. Any idea why?

有帮助吗?

解决方案

You are replacing the first fig when you call subplot inside the loop, here is a fixed version. See that ax returned by subplots is a np.ndarray, so you have to give an index ax[foo] to obtain the AxesSubplot object.

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()
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top