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

时间:2013-11-23 16:58:16

标签: matplotlib color-mapping

我正在尝试使用matplotlib的工具复制附图的样式。

Curves whose colour change with height

基本上,我想使用matplotlib根据y值改变曲线的颜色。

1 个答案:

答案 0 :(得分: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))

colors

如果你真的希望一行的颜色相对于它的值发生变化,你必须要破解它,因为任何给定的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')

注意:

  • 颜色向量的范围应介于01之间,因此,如果y.max() > 1,则按其标准化:c=cm.hot(y/y.max())并确保其全部为正数。
  • 我使用了edgecolor='none',因为默认情况下,scatter标记的黑色轮廓使其看起来不像是一条统一的线条。
  • 如果您的数据间隔太远,如果您不希望标记之间存在间隙,则必须插入数据。

more colors