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

Matplotlib叠加柱状图添加alpha0.01-1蓝色渐变图例方法

叠加柱状图蓝色系渐变图例实现方案

原有代码调整点

  • 原代码循环绘图时所有柱状图固定使用alpha=0.01,无法通过透明度区分叠加层级,首先需要按绘图列数,线性分配0.01到1区间的透明度值,每列柱子对应唯一透明度
  • 不需要调用默认离散图例,直接通过matplotlib颜色映射组件生成连续渐变的蓝色系透明度色条作为图例

完整修改代码

import pandas as pd
import matplotlib.pyplot as plt 
import numpy as np
from matplotlib.cm import ScalarMappable
from matplotlib.colors import LinearSegmentedColormap, Normalize

# 读取数据
data = pd.read_csv(r"SomePath\Data.csv")  # 路径前加r避免转义错误
data.iloc[:, 0] = pd.to_datetime(data.iloc[:, 0])
year = pd.DatetimeIndex(data.iloc[:, 0]).year
df = pd.DataFrame(data)
X = year

# 按绘图列数生成0.01到1的线性透明度序列
plot_col_count = len(df.columns) - 2
alpha_list = np.linspace(0.01, 1, plot_col_count)

# 循环绘制每列柱状图,分配对应透明度
for col_idx, i in enumerate(range(2, len(df.columns))):
    Y = list(df.iloc[:, i])
    plt.bar(X, Y, color='blue', alpha=alpha_list[col_idx])

# 生成蓝色系透明度渐变图例
blue_alpha_cmap = LinearSegmentedColormap.from_list(
    "blue_grad",
    [(0, 0.22, 0.65, a) for a in np.linspace(0.01, 1, 256)]
)
norm = Normalize(vmin=0.01, vmax=1)
color_map = ScalarMappable(norm=norm, cmap=blue_alpha_cmap)
color_map.set_array([])
cbar = plt.colorbar(color_map, shrink=0.8)
cbar.set_label("透明度alpha值", fontsize=10)

# 原有图表配置
plt.title("Title")
plt.xlabel("Year")
plt.ylabel("Value")
plt.xticks(rotation=90)
plt.xticks(np.arange(min(X), max(X)+1, 1))
plt.tight_layout()  # 自动调整布局避免标签被截断
plt.show()

实现效果说明

  • 所有柱状图保持蓝色系,越靠上层的叠加柱透明度越低、蓝色越深,视觉上可以直观区分叠加密度
  • 右侧渐变图例和柱体透明度完全对应:底端对应alpha=0.01的近透明浅蓝,顶端对应alpha=1的实色深蓝
  • 新增tight_layout()配置自动适配元素位置,避免旋转后的x轴标签、色条标签被画布截断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 03:15:43