根据matplotlib中的y值更改曲线的颜色

Joe*_*ont 6 matplotlib color-mapping

我正在尝试使用matplotlib的设施复制附图的样式.

颜色随高度变化的曲线

基本上,我想使用matplotlib根据其y值更改曲线的颜色.

ask*_*han 12

您显示的图表没有通过图表的垂直轴设置的颜色(这是我认为的y值).相反,它只有8个不同的地块覆盖,每个都有不同的颜色,没有说明颜色的含义.

这是一个看起来像你的情节的例子:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm

# some fake data:
x = np.linspace(0, 2*np.pi, 1000)
fs = np.arange(1, 5.)
ys = np.sin(x*fs[:, None])

for y, f in zip(ys, fs):
    plt.plot(x, y, lw=3, c=cm.hot(f/5))
Run Code Online (Sandbox Code Playgroud)

颜色

如果你真的希望一条线的颜色相对于它的值发生变化,你必须要破解它,因为Line2D据我所知,任何给定的对象只能有一种颜色.一种方法是制作散点图,其中每个点可以有任何颜色.

x = np.linspace(0, 2*np.pi, 1000)
y = np.sin(2*x)
plt.scatter(x,y, c=cm.hot(np.abs(y)), edgecolor='none')
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 颜色矢量应该在0和之间1,所以if y.max() > 1,然后用它标准化:c=cm.hot(y/y.max())并确保它都是正数.
  • 我使用的edgecolor='none'是因为默认情况下scatter标记有一个黑色轮廓,使它看起来不像一条统一的线条.
  • 如果您的数据间隔太远,如果您不希望标记之间存在间隙,则必须插入数据.

更多颜色