我正在尝试使用matplotlib的工具复制附图的样式。
基本上,我想使用matplotlib根据y值改变曲线的颜色。
答案 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))
如果你真的希望一行的颜色相对于它的值发生变化,你必须要破解它,因为任何给定的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')
注意:
0
和1
之间,因此,如果y.max() > 1
,则按其标准化:c=cm.hot(y/y.max())
并确保其全部为正数。 edgecolor='none'
,因为默认情况下,scatter
标记的黑色轮廓使其看起来不像是一条统一的线条。