Jos*_*osé 4 python plot matplotlib pandas
我正在使用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"])
Run Code Online (Sandbox Code Playgroud)
现在,我想创建一个条形图,其重要性为数值,人物名称为刻度,并使用类型列指定颜色.我已经阅读了其他问题(例如:为定义的列定义Pandas/Matplotlib的条形图颜色)但它不起作用......
所以,首先我必须定义颜色并将它们分配给不同的值:
colors = {'apostel':'blue','lord':'green'}
Run Code Online (Sandbox Code Playgroud)
最后使用.plot()函数:
dfnames.plot(x="name", y="importance", kind="bar", color = dfnames['type'].map(colors))
Run Code Online (Sandbox Code Playgroud)
好.唯一的问题是所有的栏都是绿色的:
为什么??我不知道......我在Spyder和Jupyter进行测试......有什么帮助吗?谢谢!
按本GH16822,这是一个回归错误在版本中引入的0.20.3
,其特征在于,只有所述第一颜色由传递颜色列表拾取.这不是先前版本的问题.
根据其中一位贡献者的原因是 -
问题似乎在于
_get_colors
.我认为BarPlot
应该定义一个_get_colors
类似的东西Run Code Online (Sandbox Code Playgroud)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)
有几种选择 -
v0.22
)如果你需要一个解决方法,有一个(在问题跟踪器中也会提到)你将参数包装在一个额外的元组中 -
dfnames.plot(x="name",
y="importance",
kind="bar",
color=[tuple(dfnames['type'].map(colors))]
Run Code Online (Sandbox Code Playgroud)虽然为了进步,我建议你更新你的熊猫.