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] )
关键优化点
- 去掉冗余的DataFrame颜色列:原代码里的
df_poke['Type 1 color']其实画图时并没有用到,直接删除可以节省内存和不必要的计算。 - 直接用Series索引匹配颜色:
value_counts()返回的Series,其索引就是按计数排序后的分类名称,和条形图的顺序完全一致。用列表推导式遍历索引生成颜色列表,比重置索引再apply简洁太多。 - 更紧凑的代码结构:如果愿意,甚至可以把颜色生成直接写到
plot的参数里,不用单独定义colors变量,进一步精简代码。
这样一来,你就不用再重复处理索引和映射,代码逻辑更清晰,也更易维护。
内容的提问来源于stack exchange,提问作者Fernando Alário
相关产品推荐
相关产品推荐

