如何在折线图上叠加带透明度(alpha值)的矩形标记阶段?
折线图叠加透明阶段矩形实现方案(Matplotlib)
下面以Python的Matplotlib库为例,直接实现你要的需求——在折线图上叠加覆盖整个垂直范围的透明阶段矩形:
核心实现代码
import matplotlib.pyplot as plt import numpy as np # 生成示例折线数据 x = np.arange(0, 50) y = np.random.randn(50).cumsum() # 创建绘图对象 fig, ax = plt.subplots(figsize=(10, 6)) # 绘制折线图 ax.plot(x, y, label='折线数据') # 定义各阶段的起始/结束索引、颜色、标签 stages = [ (5, 15, '#ffcccc', '阶段A'), (20, 30, '#ccffcc', '阶段B'), (35, 45, '#ccccff', '阶段C') ] # 循环绘制每个阶段的透明矩形 for start_idx, end_idx, color, label in stages: # axvspan自动填充整个y轴范围,alpha控制透明度 ax.axvspan(start_idx, end_idx, alpha=0.3, color=color, label=label) # 调整图例(避免重复显示相同标签) handles, labels = plt.gca().get_legend_handles_labels() by_label = dict(zip(labels, handles)) ax.legend(by_label.values(), by_label.keys()) plt.xlabel('横轴索引') plt.ylabel('数值') plt.title('带阶段标记的折线图') plt.show()
关键说明
- 使用
ax.axvspan()方法是最简便的方式,它会自动将矩形垂直填充整个图表的y轴范围,无需手动设置y轴的上下限 - 参数解释:
xmin/xmax:对应你已知的阶段起始、结束横轴索引alpha:设置透明度,取值0(完全透明)到1(完全不透明)之间color:矩形填充色,支持十六进制色码、颜色名称等label:阶段名称,用于图例显示
- 如果你的横轴不是连续索引而是自定义数值,只需把
start_idx和end_idx替换为对应的横轴数值即可
内容的提问来源于stack exchange,提问作者Bruno
相关产品推荐
相关产品推荐

