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

Matplotlib柱状图分类配色优化:简化DataFrame颜色映射代码

优化Matplotlib柱状图颜色匹配的简洁方案

嘿,我完全懂你不想反复折腾索引重置和重复映射的麻烦——咱们可以直接利用value_counts返回的Series自带的索引来匹配颜色,彻底简化流程,去掉那些冗余操作。

优化后的代码

pokecolor = {'Grass': '#78C850', 'Normal':'#A8A878','Fire':'#F08030','Fighting':'#C03028','Water':'#6890F0', 'Flying':'#A890F0','Poison':'#A040A0','Electric':'#F8D030','Ground':'#E0C068','Psychic':'#F85880','Rock':'#B8A038','Ice':'#98D8D8','Bug':'#A8B820','Dragon':'#7038F8','Ghost':'#705898','Dark':'#705848','Steel':'#B8B8D0','Fairy':'#EE99AC'}

# 直接获取分类计数,不需要额外给DataFrame加颜色列(除非你后续还要用)
tipo1 = df_poke['Type 1'].value_counts(ascending=True)

# 利用Series的索引直接生成颜色列表,完美匹配条形顺序
tipo1.plot(
    kind='barh', 
    grid=True, 
    figsize=(15,8), 
    xticks=range(0,111,10), 
    color=[pokecolor[t] for t in tipo1.index]
)

关键优化点

  1. 去掉冗余的DataFrame颜色列:原代码里的df_poke['Type 1 color']其实画图时并没有用到,直接删除可以节省内存和不必要的计算。
  2. 直接用Series索引匹配颜色:value_counts()返回的Series,其索引就是按计数排序后的分类名称,和条形图的顺序完全一致。用列表推导式遍历索引生成颜色列表,比重置索引再apply简洁太多。
  3. 更紧凑的代码结构:如果愿意,甚至可以把颜色生成直接写到plot的参数里,不用单独定义colors变量,进一步精简代码。

这样一来,你就不用再重复处理索引和映射,代码逻辑更清晰,也更易维护。

内容的提问来源于stack exchange,提问作者Fernando Alário

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:27:56