Pandas v0.20与Matplotlib条形图颜色分配异常问题求助
解决Pandas条形图按列映射颜色全变单一色的问题
我明白你遇到的困扰了——明明已经按type列映射了颜色,结果所有条形都变成绿色,这确实让人头疼。咱们一步步拆解问题、解决它:
问题根源
Pandas的df.plot(kind='bar')里的color参数,设计初衷是为每一列数据指定颜色,而非为单个条形分配颜色。你这里只有importance一列数据,当你传入dfnames['type'].map(colors)这个Series时,它并没有逐个解析每个条形的颜色,而是把整个序列当成了这一列的单一颜色参数,最终导致所有条形都显示成同一种颜色(刚好你的数据里第一个映射值是green,或者函数取了序列的某个默认值)。
解决方案:用Matplotlib原生函数绘制
要实现每个条形按type列分配颜色,直接用Matplotlib的bar函数更精准可控,代码如下:
import pandas as pd import matplotlib.pyplot as plt # 构建你的DataFrame pers1 = ["Jesús","lord",2] pers2 = ["Mateo","apostel",1] pers3 = ["Lucas","apostel",1] dfnames = pd.DataFrame( [pers1,pers2, pers3], columns=["name","type","importance"] ) # 定义颜色映射 colors = {'apostel':'blue','lord':'green'} # 为每个条形匹配对应颜色 bar_colors = dfnames['type'].map(colors) # 用Matplotlib原生bar函数绘制 plt.bar(x=dfnames['name'], height=dfnames['importance'], color=bar_colors) plt.title("Importance by Person") # 可选:添加标题 plt.xlabel("Name") # 可选:添加x轴标签 plt.ylabel("Importance") # 可选:添加y轴标签 plt.show()
运行这段代码后,你会看到:
- Jesús的条形是绿色(对应
lord类型) - Mateo和Lucas的条形是蓝色(对应
apostel类型)
这样就完美实现了你想要的按类型分配颜色的效果。
内容的提问来源于stack exchange,提问作者José
相关产品推荐
相关产品推荐

