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

如何让堆叠柱状图与折线图中同名数据系列颜色一致?

实现堆叠柱状图与折线图同名数据系列颜色一致

核心思路是为两个DataFrame中所有出现的数据系列(列名并集)分配唯一颜色,绘图时直接复用这个颜色映射,确保同名系列调用相同颜色。

修正代码及关键点说明

# 提取两个DataFrame的所有列名并集,确保每个系列都有对应颜色
cols = df_Plot.columns.union(df_Plot1.columns)  
# 用Set1配色方案为每个系列绑定唯一颜色
cmap = matplotlib.colormaps['Set1']
colors = {col: cmap(i) for i, col in enumerate(cols)}

# 绘制堆叠柱状图:直接传入颜色字典,plot会自动匹配对应系列的颜色
df_Plot.iloc[0:plotFinish].plot.bar(
    ax=ax1, 
    color=colors,  # 用颜色字典替代原列表映射,避免顺序问题
    rot=45, 
    legend=True, 
    xlabel='Date', 
    ylabel='Actuals', 
    alpha=0.5, 
    stacked=True
)

# 绘制折线图:复用同一颜色字典,同名系列自动使用相同颜色
df_Plot1.iloc[0:plotFinish].plot.line(
    ax=ax2, 
    color=colors, 
    ylabel='Allocation', 
    legend=True, 
    linewidth=3
)

# 保留原有图例设置
ax1.legend(title='Actuals', bbox_to_anchor=(1.05,1.0), loc='upper left', ncol=1)
ax2.legend(title='Allocations', bbox_to_anchor=(1.05,0.5), loc='upper left', ncol=1)
fig.suptitle(employee)

关键优化点

  1. 颜色映射更可靠:用字典直接绑定系列名与颜色,替代原有的列名map生成列表的方式,彻底避免因列顺序变化导致的颜色不匹配。
  2. 简化冗余操作:原代码中的reindex(columns=cols)可以去掉,plot方法会自动忽略DataFrame中不存在的系列,颜色字典里多余的键不会影响绘图。
  3. 配色扩展性:如果数据系列数量超过Set1的颜色数(共9种),可以换用tab20这类颜色更多的配色方案,或者循环复用颜色:
    # 循环使用Set1颜色的示例
    colors = {col: cmap(i % len(cmap.colors)) for i, col in enumerate(cols)}
    

额外提示

注意两个DataFrame的x轴对齐问题:df#1的x轴是具体日期,df#2是月份,若需要折线与柱状图在时间上严格对齐,可将df#2的月份转换为对应月份的日期(比如每月第一天),确保x轴数据类型一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 09:57:39