You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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é

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:51:35