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
相关产品推荐
相关产品推荐

