Python 使用循环使用自定义线格式绘制大型数据集的强健解决方案
我正试图从统计数据中按年份绘制人口和国家数据图。例: 问题在于,要想知道哪条线对应于哪个国家。我尝试了许多不同的方法,最容易区分的方法似乎是将直线绘制为虚线。Ex(代码段,不完整): 结果图: 但上述情况并不可靠。添加到数据集需要硬编码另一行,删除国家也是如此。这将有力地在数据上循环:Python 使用循环使用自定义线格式绘制大型数据集的强健解决方案,python,pandas,Python,Pandas,我正试图从统计数据中按年份绘制人口和国家数据图。例: 问题在于,要想知道哪条线对应于哪个国家。我尝试了许多不同的方法,最容易区分的方法似乎是将直线绘制为虚线。Ex(代码段,不完整): 结果图: 但上述情况并不可靠。添加到数据集需要硬编码另一行,删除国家也是如此。这将有力地在数据上循环: fig, ax = plt.subplots() plt.xlabel('Year') plt.ylabel('Population') for countries in df2['country'].uniq
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和iterables在一个绘图中一起工作
iterables—在不丢失基础数据的情况下,很难获得独特的国家/地区,仍然存在线路定制问题 我承认,虽然我有C、C++和C语言的经验,但我是Python的新手,更喜欢熊猫。它要求人们重新思考问题的方式。因此,应用许多模糊相似的关于自定义行和图例的StackOverflow Q&a并没有产生像对更有经验的人那样的解决方案。我希望有人知道答案,这可能不仅仅对我有帮助 更新:在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)
我建议您对在循环中更改破折号属性的尝试进行以下更改:
for i, countries in enumerate(df2['country'].unique()):
这将需要进一步的风格调整,但应该是一个良好的起点
更广泛地说,与广亨的评论相呼应的是,在一个情节上呈现这么多的线条而不造成视觉上的混乱是非常困难的。两种可能的解决办法:
- 按较大区域(北美和南美、东南亚等)对数据集进行分组,并构建多个图
- 在Bokeh、Plotly Dash或Holoviews中,通过国家/地区的缩放、平移和切换构建交互式线条图
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)
for i, countries in enumerate(df2['country'].unique()):