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

如何为Matplotlib堆叠图的“Odds”区域添加渐变填充?

实现Matplotlib堆叠图中“Odds”区域的渐变填充效果

可以实现这个需求。Matplotlib的stackplot默认不支持直接设置渐变填充,但可以通过手动绘制堆叠区域的多边形,并为其添加线性渐变来达成效果。以下是修改后的完整代码:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon, Patch
from matplotlib.colors import LinearGradient

x = [1, 2, 3, 4, 5]
y1 = [1, 1, 2, 3, 5]
y2 = [0, 4, 2, 6, 8]
y3 = [1, 3, 5, 7, 9]

# 计算"Odds"区域的上下边界(堆叠后的位置)
bottom = np.array(y1) + np.array(y2)
top = bottom + np.array(y3)

fig, ax = plt.subplots()

# 先绘制前两个堆叠区域
ax.stackplot(x, y1, y2, labels=["Fibonacci", "Evens"])

# 构建"Odds"区域的多边形顶点(闭合路径)
verts = []
for xi, b, t in zip(x, bottom, top):
    verts.append((xi, b))
# 从右到左连接顶部边界,形成闭合多边形
for xi, t in reversed(list(zip(x, top))):
    verts.append((xi, t))
verts.append((x[0], bottom[0]))  # 闭合路径

# 创建从左到右的绿色到透明的线性渐变
# 颜色格式为(R, G, B, Alpha),这里绿色保持,Alpha从1到0
gradient = LinearGradient((0, 0), (1, 0), colors=[(0.2, 0.8, 0.2, 1), (0.2, 0.8, 0.2, 0)])

# 创建多边形并添加到轴上
poly = Polygon(verts, facecolor=gradient, edgecolor='none')
ax.add_patch(poly)

# 手动添加"Odds"的图例项
legend_handles = ax.get_legend_handles_labels()[0]
legend_handles.append(Patch(facecolor=(0.2, 0.8, 0.2), label='Odds'))
ax.legend(handles=legend_handles, loc='upper left')

plt.show()

关键步骤说明:

  • 计算堆叠边界:先算出"Odds"区域在堆叠后的上下位置,即前两个系列的总和为底部,加上自身数据为顶部。
  • 构建多边形顶点:将x轴坐标与上下边界组合,再反转顶部坐标形成闭合的多边形路径,确保填充区域正确。
  • 创建线性渐变:使用LinearGradient定义从左到右的渐变,颜色从不透明绿色过渡到完全透明的同色。
  • 添加多边形与图例:把带渐变的多边形添加到轴上,同时手动补充图例项,保证图例显示完整。

内容的提问来源于stack exchange,提问作者Stücke

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 06:20:03