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

Matplotlib:如何根据X坐标为LineCollection设置渐变颜色?

Fixing Horizontal Gradient for LineCollection in Matplotlib

我懂你遇到的问题了——你想让颜色随X坐标从左到右逐渐变白,但现在却在Y轴方向重复黑到白的循环。问题确实出在v的结构上,咱们一步步来解决:

问题根源

你当前生成的v是按Y值分组的水平线段:每个子列表对应一个固定Y值,包含从X=60到X=70的所有点。而LineCollection的set_array()是给每个线段分配一个颜色值,不是给线段上的每个点。因为你的v有200个线段(对应ys的200个值),但xs只有10个值,所以颜色会循环复用,导致Y轴方向重复渐变。

解决方案

要实现横向渐变,我们需要把线段改成按X值分组的垂直线段:每个线段对应一个固定X值,覆盖整个Y轴范围。这样每个线段就能对应一个唯一的X坐标,颜色就能正确随X增大渐变。

修正后的完整代码

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

fig, ax = plt.subplots(figsize=(14, 6))
ax.set_facecolor('k')
ax.set_xlim(0, 100)
ax.set_ylim(0, 100)

xs = np.arange(60, 70)  # X从60到69,共10个值
ys = np.arange(0, 100, .5)  # Y从0到99.5,共200个值

# 关键修改:生成垂直线段,每个X对应一条覆盖全Y的线段
v = [[[x, y] for y in ys] for x in xs]

lines = LineCollection(v, linewidth=1, cmap=plt.cm.Greys_r)
lines.set_array(xs)  # 每个线段对应一个X值,颜色随X渐变
ax.add_collection(lines)

plt.show()

为什么这样管用?

  • 现在v的长度等于xs的长度(10个线段),每个线段对应一个固定的X值,从Y=0延伸到Y=100。
  • set_array(xs)给每个线段分配对应的X值作为颜色映射的依据,配合Greys_r(反向灰度,小值黑,大值白),就会实现X从60到70时,颜色从黑逐渐变白的横向渐变效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:51:48