我正尝试按年份绘制Comparative Political Data Set中的人口和国家数据。例如:
year country pop15_64
1960 Australia 6296.50
1961 Australia 6428.60
1962 Australia 6571.50
1960 USA 107919.4
1961 USA 109048.6
1962 USA 111177.3
问题在于尝试查看对应于哪个国家/地区的行。我尝试了许多不同的方法,最容易区分的似乎是将虚线绘制为虚线。例如(摘要,不完整):
df2.loc[df2['country'] == 'Cyprus'].plot(x='year', y='pop15_64', ax=ax, color='k')
df2.loc[df2['country'] == 'Czech Republic'].plot(x='year', y='pop15_64', ax=ax, color='g', dashes=[3, 3])
但以上内容并不可靠。添加到数据集需要对另一行进行硬编码,就像删除国家/地区一样。这样可以强大地循环数据:
fig, ax = plt.subplots()
plt.xlabel('Year')
plt.ylabel('Population')
for countries in df2['country'].unique():
df2[df2['country']==countries].plot.line(x='year',
y='pop15_64',
ax=ax,
label=countries,
title='Country Population by Year')
ax.legend(handlelength=5)
plt.show()
...但是我看不到在不破坏循环的情况下自定义这些循环中的行的方法。例如,这:
for countries, x in df2['country'].unique():
df2[df2['country']==countries].plot.line(x='year',
y='pop15_64',
ax=ax,
dashes=[x+2, x],
label=countries,
title='Country Population by Year')
...导致“ ValueError:太多值无法解包(预期2)”
我还尝试了什么:
.groupby-无法让groupby和可迭代项在一个情节中一起工作
可迭代-难以在不丢失基础数据的情况下获得唯一国家/地区,但仍存在线路定制问题。
我承认,虽然我有C,C ++和C#的经验,但我是python的新手,而pandas则更多。它要求人们如何思考问题的结构调整。因此,对自定义行和图例应用许多与之大致相似的StackOverflow问题与解答,并不能为那些有更多经验的人提供像这样的解决方案。我希望有人知道答案,这不仅对我有帮助。
更新:在彼得·莱姆比格勒(Peter Leimbigler)回答后,我针对此临时解决方案修改了上述内容:
for i, countries in enumerate(df2['country'].unique()):
df2[df2['country']==countries].plot.line(x='year',
y='pop15_64',
ax=ax,
dashes=[3+i, i/2, abs(i-2), i/2],
label=countries)
答案 0 :(得分:1)
对于在循环中更改破折号属性的尝试,我建议进行以下更改:
for i, countries in enumerate(df2['country'].unique()):
这将需要进一步的风格调整,但应该是一个很好的起点。
从广义上讲,要想回应黄光昂的评论,很难在没有视觉混乱的情况下在一张图中显示这么多线条。两种可能的解决方法: