使用循环绘制具有自定义线格式的大型数据集的强大解决方案

实验室壁虎

我试图从比较政治数据集中按年份绘制人口和国家数据前任:

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

问题在于试图查看哪条线对应于哪个国家/地区。我尝试了许多不同的方法,最容易区分的似乎是将线条绘制为破折号。Ex(片段,不完整):

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

...results in a "ValueError: too many values to unpack (expected 2)"

What else I tried:
.groupby - couldn't get groupby and iterables to work together in one plot
iterables - had difficulty getting unique countries without losing the underlying data, still had line customization issues.

I admit that while I have experience in C, C++, and C#, I am a novice at python and more so with pandas. It requires a restructuring in how one thinks about problems. As a result, applying the many vaguely similar StackOverflow Q&A about custom lines and legends has not resulted in solutions like it might for someone with more experience. I hope someone knows an answer, and that this might help more than just me.

更新:在 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()):

这将需要进一步的风格调整,但应该是一个很好的起点。

更广泛地说,为了回应 Quang Hoang 的评论,很难在一个情节中呈现这么多行而不会有视觉混乱。两种可能的解决方法:

  • 按更大的区域(北美和南美、东南亚等)对数据集进行分组并构建多个图。
  • 使用 Bokeh、Plotly Dash 或 Holoviews 等方式构建具有国家/地区缩放、平移和切换功能的交互式线图。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

FileSystemWatcher 多次触发事件的强大解决方案

来自分类Dev

CRM 2011使用“自定义系统”和“解决方案”有什么区别?

来自分类Dev

自定义解决方案的Visual Studio配色方案

来自分类Dev

自定义数据库收集所需的 xslt 解决方案

来自分类Dev

自定义Vtype的替代解决方案?

来自分类Dev

Git合并冲突自定义自动解决方案

来自分类Dev

如何创建自定义动态DNS解决方案?

来自分类Dev

MVC 6自定义Taghelper验证-解决方案

来自分类Dev

这是使用Couchbase解决方案的.NET自定义角色提供程序的合理方法吗?

来自分类Dev

在解决方案上使用msbuild在某些项目上调用自定义目标

来自分类Dev

soapClient方法__soapCall自动应用编码,服务不需要编码的数据,是否有任何解决方案或自定义实现?

来自分类Dev

删除Redis中排除自定义用户键的所有键的最佳解决方案?

来自分类Dev

RecyclerView 项目中的自定义 TextView 停止 ItemClickListener 调用(现有解决方案不起作用)

来自分类Dev

使用Tensorboard绘制自定义数据

来自分类Dev

使用强大的参数自定义设计

来自分类Dev

是否有for循环或purrr解决方案?

来自分类Dev

TFF:具有自定义数据集的自定义输入规范-TypeError:“ TensorSpec”类型的对象没有len()

来自分类Dev

同一解决方案的其他项目中的自定义追加程序

来自分类Dev

Visual Studio 2012可以在解决方案中保存自定义NuGet包源吗?

来自分类Dev

导入多个自定义机会实体的托管解决方案后出现的问题

来自分类Dev

针对C#解决方案的MSBuild(类似版本)上的自定义

来自分类Dev

改进此自定义函数addClassIfVarDefined()或共享更好的解决方案

来自分类Dev

Java字符串自定义替换的优雅解决方案

来自分类Dev

Imageview和ListViews-解决方案是自定义适配器吗?

来自分类Dev

将此自定义回合转换为更数学友好的解决方案

来自分类Dev

HTML选择元素-自定义默认值?(跨浏览器解决方案)

来自分类Dev

针对C#解决方案的MSBuild(类似版本)上的自定义

来自分类Dev

无法导入Dynamics CRM 2013自定义代码验证工具解决方案

来自分类Dev

同一解决方案的其他项目中的自定义追加程序

Related 相关文章

  1. 1

    FileSystemWatcher 多次触发事件的强大解决方案

  2. 2

    CRM 2011使用“自定义系统”和“解决方案”有什么区别?

  3. 3

    自定义解决方案的Visual Studio配色方案

  4. 4

    自定义数据库收集所需的 xslt 解决方案

  5. 5

    自定义Vtype的替代解决方案?

  6. 6

    Git合并冲突自定义自动解决方案

  7. 7

    如何创建自定义动态DNS解决方案?

  8. 8

    MVC 6自定义Taghelper验证-解决方案

  9. 9

    这是使用Couchbase解决方案的.NET自定义角色提供程序的合理方法吗?

  10. 10

    在解决方案上使用msbuild在某些项目上调用自定义目标

  11. 11

    soapClient方法__soapCall自动应用编码,服务不需要编码的数据,是否有任何解决方案或自定义实现?

  12. 12

    删除Redis中排除自定义用户键的所有键的最佳解决方案?

  13. 13

    RecyclerView 项目中的自定义 TextView 停止 ItemClickListener 调用(现有解决方案不起作用)

  14. 14

    使用Tensorboard绘制自定义数据

  15. 15

    使用强大的参数自定义设计

  16. 16

    是否有for循环或purrr解决方案?

  17. 17

    TFF:具有自定义数据集的自定义输入规范-TypeError:“ TensorSpec”类型的对象没有len()

  18. 18

    同一解决方案的其他项目中的自定义追加程序

  19. 19

    Visual Studio 2012可以在解决方案中保存自定义NuGet包源吗?

  20. 20

    导入多个自定义机会实体的托管解决方案后出现的问题

  21. 21

    针对C#解决方案的MSBuild(类似版本)上的自定义

  22. 22

    改进此自定义函数addClassIfVarDefined()或共享更好的解决方案

  23. 23

    Java字符串自定义替换的优雅解决方案

  24. 24

    Imageview和ListViews-解决方案是自定义适配器吗?

  25. 25

    将此自定义回合转换为更数学友好的解决方案

  26. 26

    HTML选择元素-自定义默认值?(跨浏览器解决方案)

  27. 27

    针对C#解决方案的MSBuild(类似版本)上的自定义

  28. 28

    无法导入Dynamics CRM 2013自定义代码验证工具解决方案

  29. 29

    同一解决方案的其他项目中的自定义追加程序

热门标签

归档