【问题标题】:Gradient colour for a vertical/horizontal line in matplotlibmatplotlib 中垂直/水平线的渐变色
【发布时间】:2021-06-03 18:21:23
【问题描述】:

我想将颜色映射应用到垂直线作为渐变,这取决于它在 y 中的距离。我正在使用经典的 vlines 方法来绘制线条: plt.vlines(xVal, 0, maxY, color='C0')

要创建垂直渐变,我想我会使用 matplotlib 的 LineCollection 方法,但我不知道如何将该技术应用于单行,因为 vlines 仅依赖于 x 坐标和 min /max y 范围。

编辑:

为关心的人找到了一个简单的解决方案。

colorRange = np.arange(0, val, 0.01)
colors = plt.cm.OrRd(np.linspace(0, 1, len(colorRange)))
for i, j in enumerate(colorRange):
   plt.vlines(xPlot[ind], 0, colorRange[i], color=colors[i], zorder=-1*i, linewidth=7)

用于创建基于多行的渐变并仅使用 z 排序。 Val 是您希望以 y 表示的最大值/最小值。

【问题讨论】:

标签: python matplotlib plot gradient


【解决方案1】:

您可以创建一组短线并赋予它们单独的颜色:

from matplotlib import pyplot as plt
import numpy as np

np.random.seed(222)
curve = np.random.randn(1000).cumsum().cumsum()
plt.plot(curve)
xval = curve.argmax()
ymax = curve.max()
num_pieces = 100
ys = np.linspace(0, ymax, num_pieces + 1)
cmap = plt.get_cmap('turbo')
plt.vlines(np.repeat(xval, num_pieces), ys[:-1], ys[1:], colors=cmap(np.linspace(0, 1, num_pieces)))
plt.show()

【讨论】:

  • 这个答案有帮助吗?