Reputation: 2456
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?
Upvotes: 3
Views: 7126
Reputation: 58885
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()
Upvotes: 2