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

在Matplotlib堆叠面积图中创建透明区域

解决堆叠面积图下方白色区域透明问题

你的问题出在用白色填充0到Min的区域,不管调整alpha参数,白色都会覆盖背景,达不到透明效果。正确的做法是直接绘制Max与Min之间的范围,而非通过两次堆叠来“遮掉”下方区域。

修正方案:使用fill_between绘制范围区域

fill_between可以直接填充两条曲线之间的区域,完美契合你的需求(展示5Y Max和5Y Min的范围,叠加Avg虚线):

import matplotlib.pyplot as plt

# 绘制5年平均值虚线
plt.plot(df.index, df["5y Avg"], color=avg_color, linestyle="dotted", label='5y Avg')

# 填充Max和Min之间的灰色区域
plt.fill_between(df.index, df["5Y Min"], df["5Y Max"], color="#B1B3B6", alpha=0.5, label='5y Range')

# 调整图例、坐标轴等
plt.legend()
plt.show()

为什么原代码无效?

你原本的逻辑是先堆叠0到Max的灰色区域,再堆叠0到Min的白色区域,试图让白色区域透明。但stackplot的填充是从底部(0)开始的,白色填充会完全覆盖下方的背景,即使调alpha也只是让白色半透明,无法真正“消失”。

如果坚持用stackplot的替代写法

如果你一定要基于stackplot实现,需要堆叠的是Max - Min的差值,而非单独的Max和Min:

plt.plot(df.index, df["5y Avg"], color=avg_color, linestyle="dotted", label='5y Avg')
# 先堆叠Min的“占位”区域,设置为完全透明
plt.stackplot(df.index, df["5Y Min"], color="none", alpha=0)
# 再堆叠Max - Min的差值区域,显示灰色
plt.stackplot(df.index, df["5Y Max"] - df["5Y Min"], color="#B1B3B6", labels=['5y Range'])

plt.legend()
plt.show()

这种方法通过第一个透明的stackplot占据Min的高度,再堆叠差值部分,最终效果和fill_between一致,但fill_between更直观简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 00:45:13