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

pandas绘制柱状图时.map方法未正确映射颜色值问题

问题原因
  • 颜色错位的核心是传入的颜色序列和实际绘图的柱形在长度、顺序上完全不匹配:
    1. 调用df['Journal Type'].value_counts()后,返回的是按频次降序排列的类别计数结果,长度等于该列唯一值总个数,柱形排列顺序就是这个计数结果的索引顺序,和原DataFrame的行顺序没有关联。
    2. 原代码中df['Journal Type'].map(color_dict)是对全量原始列做颜色映射,长度等于整个DataFrame的总行数,远大于柱形总数量。pandas绘图时遇到长度超出柱数的颜色序列,会直接从序列头部截取和柱数相等的前N个值使用——如果原df前N行的Journal Type值都是Architecture,截出来的前N个颜色就全是#45173C,自然出现柱色和预设规则不符、仅用到字典靠前色值的问题。
    3. 即便长度碰巧一致,原始列的行顺序和value_counts排序后的类别顺序也不对应,颜色映射依然会错位。
修复方法

不要对原始全量列做颜色映射,要针对value_counts输出结果的索引(即实际绘图的类别顺序)做映射,保证颜色序列的长度、顺序和柱形完全一一对应。
修正后的可运行代码如下:

import pandas as pd
import matplotlib.pyplot as plt

color_dict = {'Architecture':'#45173C' , 'Music':'#2A2060' , 'Decorative Art':'#3E4DBB' , 'Humour' :'#EBD2C2', 'Bibliophily' : '#121E36',
       'War' :'#4448C1', 'Modern Art Journal' :'#A3E0AD', 'Avant-garde Journal' :'#327728', 'Art History' :'#216356',
       'Art Journal' :'#3E6722', 'Design' :'#8C40BF', 'Urbanism' :'#A6D279', 'History' :'#3E4DBB',
       'Illustrated Supplement' :'#6B4C24', 'News' :'#C75778', 'Culture, Leisure' :'#121E36',
       'Regional Magazine' :'#ABE3D6', 'Leisure' :'#759AD1', 'Photography' :'#D4C47D', 'Politics' :'#D890DA',
       'Worldliness' :'#D7CDEE', 'Science' :'#D1ECC6', 'Exhibition Catalogue' :'#5BC870', 'Regional News' :'red',
       'Youth' :'#CDC36A', 'Fashion' :'#75D1B3', 'Cinema' :'#24516B', 'Sports' :'#4799C2', 'Children' :'#C6E8BA', 'Automobile' :'#9091DA',
       'Colonial' :'#86712D', 'Aviation' :'#D17D75', 'Religion' :'#EECDEB', 'Industry' :'#A3E0D5', 'Crimes' :'#D27979',
       'Theater' :'#D6A585', 'Woman' :'#CCC9ED', 'Military' :'#C8CF6E', 'Philanthropy' :'#3DB8A3', 'Black Lives' :'#5C3C1F',
       'Illustrated Magazine' :'#B6C5E7', 'Economics': '#D09671'}

# 先保存排序后的计数结果
count_result = df['Journal Type'].value_counts()
# 按实际绘图的类别顺序映射对应颜色
bar_colors = count_result.index.map(color_dict)
# 传入顺序、长度完全匹配的颜色列表绘图
count_result.plot(kind='bar', figsize=(15, 15), color=bar_colors)
plt.tight_layout()
plt.show()

额外提示:当前颜色字典里Decorative Art和History、Bibliophily和Culture, Leisure的色值重复,如果需要不同类别有明确视觉区分,可以调整这几个重复的色值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 21:57:37