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
相关产品推荐
相关产品推荐

