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

Pandas柱状图指定colormap却仅显示单一颜色问题求助

解决Pandas 0.22.0柱状图指定colormap仅显示单一颜色的问题

我来帮你搞定这个问题!你遇到的单一颜色情况,核心原因是你的DataFrame只有一列数据——Pandas的plot(kind='bar')默认把每一列当作一个独立的数据系列,同一列下的所有柱子会共享同一种颜色,colormap参数是用来区分不同列的系列,而非同一列内的不同柱子。

下面给你两种实用的解决方案,按需选择:

方法一:按数值映射彩虹色系(推荐体现数值差异)

这种方式会让柱子颜色随数值大小渐变,更直观展示数据差异,需要结合Matplotlib的colormap来生成颜色:

import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

a = pd.DataFrame({'count': {'2300-2399': 5273, '3100-3399': 1384, '4200-4299': 2662, '4400-4599': 9454, '4800-4999': 8145, '5100-5199': 2719, '5210-5239': 3187, '5240-5249': 528}} )

# 获取彩虹色的colormap对象
cmap = plt.get_cmap('rainbow')
# 将数值归一化到0-1区间,方便映射颜色
value_norm = plt.Normalize(a['count'].min(), a['count'].max())
# 为每个柱子生成对应颜色
bar_colors = [cmap(value_norm(val)) for val in a['count']]

# 绘制柱状图并应用颜色
plt.bar(a.index, a['count'], color=bar_colors)
plt.xticks(rotation=45)  # 旋转x轴标签避免重叠
plt.show()

方法二:调整DataFrame结构让Pandas自动用colormap

如果只是想让每个柱子颜色不同,不需要和数值挂钩,可以把原数据转置,让每个区间成为独立的列,这样Pandas就会用colormap给每个列(柱子)分配不同颜色:

import pandas as pd
%matplotlib inline

a = pd.DataFrame({'count': {'2300-2399': 5273, '3100-3399': 1384, '4200-4299': 2662, '4400-4599': 9454, '4800-4999': 8145, '5100-5199': 2719, '5210-5239': 3187, '5240-5249': 528}} )

# 转置DataFrame,把行变成列
a_transposed = a.T
# 绘制柱状图,此时每个柱子对应一列,colormap会生效
a_transposed.plot(kind='bar', colormap='rainbow')
plt.xticks(rotation=0)  # 保持x轴标签水平
plt.show()

内容的提问来源于stack exchange,提问作者Davis Vance

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:09:24