python - 在 Pandas v0.20 和 matplotlib 中为条形分配颜色的问题

标签 python pandas matplotlib plot

我在使用 Pandas 和 Matplotlib 定义条形图中的颜色方面苦苦挣扎了一段时间。假设我们有以下数据框:

import pandas as pd
pers1 = ["Jesús","lord",2]
pers2 = ["Mateo","apostel",1]
pers3 = ["Lucas","apostel",1]
    
dfnames = pd.DataFrame(
    [pers1,pers2, pers3],
    columns=["name","type","importance"]
)

现在,我想创建一个条形图,其中重要性作为数值,人名作为刻度,并使用类型列分配颜色。我已经阅读了其他问题(例如:Define bar chart colors for Pandas/Matplotlib with defined column)但它不起作用...

所以,首先我必须定义颜色并将它们分配给不同的值:

colors = {'apostel':'blue','lord':'green'}

最后使用 .plot() 函数:

dfnames.plot(
    x="name",
    y="importance",
    kind="bar",
    color = dfnames['type'].map(colors)
)

很好。唯一的问题是所有的条都是绿色的:

enter image description here

为什么?我不知道……我正在 Spyder 和 Jupyter 中测试它……有什么帮助吗?谢谢!

最佳答案

根据这个GH16822 ,这是版本 0.20.3 中引入的回归错误,其中只有第一个颜色是从通过的颜色列表。这不是以前版本的问题。

根据一位贡献者的说法,原因是这样的——

The problem seems to be in _get_colors. I think that BarPlot should define a _get_colors that does something like

def _get_colors(self, num_colors=None, color_kwds='color'):
    color = self.kwds.get('color')
    if color is None:
        return super()._get_colors(self, num_colors=num_colors, color_kwds=color_kwds)
    else:
        num_colors = len(self.data)  # maybe? may not work for some cases
        return _get_standard_colors(color=kwds.get('color'), num_colors=num_colors)

有几种选择 -

  1. 最明显的选择是更新到最新版本的 pandas(当前为 v0.22)
  2. 如果您需要一种解决方法,可以使用一种方法(在问题跟踪器中也提到过),您可以将参数包装在一个额外的元组中 -

    dfnames.plot(x="name",  
                 y="importance", 
                 kind="bar", 
                 color=[tuple(dfnames['type'].map(colors))]
    

不过,为了取得进步,我建议您更新您的 pandas。

关于python - 在 Pandas v0.20 和 matplotlib 中为条形分配颜色的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48184332/

相关文章:

python - 如何在 Python 中转换指数并摆脱 'e+' ?

python - 将图像插入饼图切片

python-3.x - 使用 plt.plot 与 plt.hist 的彩色图像直方图差异 [Python]

python - 如何在 python dask 中使用 group by describe with unstack 操作?

python - 事件线程数

Python 字典/循环输出

c++ - 动态链接和 Python SWIG (C++) 在 C++ 中工作在 python 中失败

python - Pandas 比较相似的 DataFrames 并获得 Min

python - 将 excel(xlsx) 文件读入数据帧时出现错误 read_excel() 遇到意外的关键字参数 'encoding'

python - 是否可以分层标记 matplotlib (pyplot) 条形图?