我正在尝试编写一个循环,它将生成一个包含25个子图的图形,每个国家都有1个。我的代码生成了一个包含25个子图的数字,但是这些图是空的。我可以更改什么才能使数据显示在图表中?
fig = plt.figure()
for c,num in zip(countries, xrange(1,26)):
df0=df[df['Country']==c]
ax = fig.add_subplot(5,5,num)
ax.plot(x=df0['Date'], y=df0[['y1','y2','y3','y4']], title=c)
fig.show()
答案 0 :(得分:4)
你在matplotlib绘图函数和熊猫绘图包装器之间感到困惑
您遇到的问题是ax.plot
没有任何x
或y
参数。
ax.plot
在这种情况下,请将其称为ax.plot(df0['Date'], df0[['y1','y2']])
,不要x
,y
和title
。可能单独设置标题。
例如:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
countries = np.random.choice(list("ABCDE"),size=25)
df = pd.DataFrame({"Date" : range(200),
'Country' : np.repeat(countries,8),
'y1' : np.random.rand(200),
'y2' : np.random.rand(200)})
fig = plt.figure()
for c,num in zip(countries, xrange(1,26)):
df0=df[df['Country']==c]
ax = fig.add_subplot(5,5,num)
ax.plot(df0['Date'], df0[['y1','y2']])
ax.set_title(c)
plt.tight_layout()
plt.show()
在这种情况下,通过df0.plot(x="Date",y =['y1','y2'])
绘制您的数据。
示例:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
countries = np.random.choice(list("ABCDE"),size=25)
df = pd.DataFrame({"Date" : range(200),
'Country' : np.repeat(countries,8),
'y1' : np.random.rand(200),
'y2' : np.random.rand(200)})
fig = plt.figure()
for c,num in zip(countries, xrange(1,26)):
df0=df[df['Country']==c]
ax = fig.add_subplot(5,5,num)
df0.plot(x="Date",y =['y1','y2'], title=c, ax=ax, legend=False)
plt.tight_layout()
plt.show()
答案 1 :(得分:2)
我不记得如何使用原始子情节系统,但你似乎正在重写情节。无论如何,你应该看看gridspec。请检查以下示例:
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
fig = plt.figure()
gs1 = gridspec.GridSpec(5, 5)
countries = ["Country " + str(i) for i in range(1, 26)]
axs = []
for c, num in zip(countries, range(1,26)):
axs.append(fig.add_subplot(gs1[num - 1]))
axs[-1].plot([1, 2, 3], [1, 2, 3])
plt.show()
结果如下:
只需用您的数据替换示例,它应该可以正常工作。
注意:我注意到您正在使用xrange
。我使用range
因为我的Python版本是3.x.适应您的版本。