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

如何用Matplotlib绘制带渐变透明度的曲线?

Matplotlib实现曲线从起点到终点透明度渐变的方法

plt.plot()本身不支持单条曲线的渐变透明度,要实现起点透明、终点不透明的效果,得用LineCollection组件,它能给曲线的每个线段单独设置透明度参数。

具体实现步骤

  • 先导入所需库:
    import matplotlib.pyplot as plt
    import numpy as np
    from matplotlib.collections import LineCollection
    
  • 处理单条/多条曲线:
    1. 把曲线的坐标点转换成线段集合:将x轴数组r和y轴数组l配对成点集,再拆分成长度为2的线段数组(每个元素对应曲线的一小段)。
    2. 生成渐变alpha数组:从0(完全透明)到1(完全不透明)线性生成,长度和线段数一致,对应每段的透明度。
    3. 用LineCollection绘制线段,并添加到坐标轴上;最后手动设置坐标轴范围(LineCollection不会自动适配轴范围)。

完整示例代码

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.collections import LineCollection

# 模拟3条符合需求的曲线:起点右上角,终点趋近(0.86, 0.5)
np.random.seed(42)
num_curves = 3
num_points = 50

curves = []
for _ in range(num_curves):
    # 生成带微小噪声的曲线数据,模拟实际场景
    r = np.linspace(1.0, 0.86, num_points) + np.random.normal(0, 0.01, num_points)
    l = np.linspace(0.9, 0.5, num_points) + np.random.normal(0, 0.01, num_points)
    curves.append((r, l))

fig, ax = plt.subplots()

# 循环绘制每条渐变透明度的曲线
colors = ['#1f77b4', '#ff7f0e', '#2ca02c']
for idx, (r, l) in enumerate(curves):
    # 转换为线段集合
    points = np.column_stack([r, l])
    segments = np.array([points[i:i+2] for i in range(len(points)-1)])
    # 生成从0到1的渐变alpha
    alphas = np.linspace(0, 1, len(segments))
    # 创建LineCollection并添加到轴上
    lc = LineCollection(segments, colors=colors[idx], alpha=alphas, linewidth=2)
    ax.add_collection(lc)

# 设置轴范围,聚焦终点区域
ax.set_xlim(0.85, 1.01)
ax.set_ylim(0.49, 0.91)

plt.show()

说明

  • 代码中每条曲线的线段透明度从起点的0逐步升到终点的1,终点区域的曲线会清晰区分,起点几乎透明不会干扰视线。
  • 如果需要反向渐变(起点不透明、终点透明),只需把np.linspace(0, 1, len(segments))改成np.linspace(1, 0, len(segments))即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 18:40:32