【问题标题】:Change bar colors in pandas matplotlib bar chart by passing a list/tuple通过传递列表/元组来更改 pandas matplotlib 条形图中的条形颜色
【发布时间】:2020-07-11 12:31:41
【问题描述】:

关于这个主题有几个主题,但似乎没有一个能直接解决我的问题。我想使用不依赖地图的自定义配色方案从熊猫数据框中绘制条形图,例如使用任意颜色列表。看起来我可以传递带有颜色简写名称的连接字符串(下面的第一个示例)。当我使用建议here 时,会重复第一种颜色(参见下面的第二个示例)。在那篇文章中有一条评论避开了我观察到的相同行为。当然,我可以通过设置子图来做到这一点,但是我很懒,想在一行中做到这一点。所以,我想使用最后一个例子,我传入一个十六进制代码列表,它按预期工作。我正在使用 >=0.24 的熊猫版本和 >1.5 的 matplotlib 版本。我的问题是:

  • 为什么会这样?
  • 我做错了什么?
  • 我可以传递颜色列表吗?

pd.DataFrame( [ 1, 2, 3, 4, 5 ] ).plot( kind="bar", color="brgmk" )

pd.DataFrame( [ 1, 2, 3, 4, 5 ] ).plot( kind="bar", color=[ "b", "r", "g", "m", "k" ] )

pd.DataFrame( [ 1, 2, 3, 4, 5 ] ).plot( kind="bar", color=[ "#0000FF", "#FF0000", "#008000", "#FF00FF", "#000000" ] )

【问题讨论】:

  • pd.DataFrame( [ 1, 2, 3, 4, 5 ] )[0].plot( kind="bar", color=[ "#0000FF", "#FF0000", "#008000", "#FF00FF", "#000000" ] ) 适用于这种情况。似乎基于 SO 上的类似问题,行为已经改变。
  • 如果你转置.T数据帧,它也可以工作。
  • @TrentonMcKinney 但生成的图表并不完全相同。
  • 剧情api很挑剔
  • 这是一个形容词哈哈。

标签: python pandas matplotlib


【解决方案1】:

绘制数据框时,第一个颜色信息用于第一列,第二个用于第二列等。颜色信息可能只是一个值,然后用于该列的所有行,也可以是多个值对列的每一行一个接一个地使用(如果行多于颜色,则从头开始重复)。请参阅以下示例:

pd.DataFrame( [[ 1, 4], [2, 5], [3, 6]] ).plot(kind="bar", color=[[ "b", "r", "g" ], "m"] )

因此,在您的情况下,您只需将颜色值列表放入列表中(特别是不是元组):

pd.DataFrame( [ 1, 2, 3, 4, 5 ] ).plot( kind="bar", color=[[ "b", "r", "g", "m", "k" ]] )

pd.DataFrame( [ 1, 2, 3, 4, 5 ] ).plot( kind="bar", color=[[ "#0000FF", "#FF0000", "#008000", "#FF00FF", "#000000" ]] )

OP 中的第一个案例 (color="brgmk") 与 pandas internally puts the color string in a list (strings are not considered list-like) 一样工作。

【讨论】:

  • 我使用这个答案来获得我的解决方案,但我需要进行调整:而不是执行 color=[[ "#0000FF", "#FF0000", "#008000", "#FF00FF" , "#000000" ]] 我必须指定列名并使用: color={'colA': [ "#0000FF", "#FF0000", "#008000", "#FF00FF", "#000000" ] }
猜你喜欢
  • 2019-06-11
  • 2018-02-08
  • 1970-01-01
  • 2018-10-28
  • 2011-08-03
  • 2012-01-19
  • 1970-01-01
  • 1970-01-01
  • 2014-10-30
相关资源
最近更新 更多