在图中,如何用不同的颜色为高于阈值的所有值上色?像高于均值+标准或均值+ 2 * std的所有内容一样?
使用aLineCollection是正确的方法,但是您也可以使用掩码数组在一行代码中完成一个简单的版本:
LineCollection
import numpy as np import numpy.ma as ma import matplotlib.pyplot as plt # make a weird continuous function r, t = np.random.random((100,)), np.arange(0, 100, .01) y = sum(r[3*i+0]*np.sin(r[3*i+1]*t + 10*r[3*+2]) for i in range(10)) # generate the masked array mask = ma.masked_less(y, 1.1) plt.plot(t, y, 'k', linewidth=3) plt.plot(t, mask, 'r', linewidth=3.2) plt.show()
这样做的弊端在于它会使用过滤后的数据绘制原始数据,因此有时基础曲线可能会显示出来,具体取决于渲染方式。我在这里把红线弄得有点粗,但是我不确定它是否有所作为。好处是,它基本上是一行,ma.masked_less(y, 1.1)阈值为1.1。
ma.masked_less(y, 1.1)
1.1
这里需要屏蔽数组的原因是,否则将有一条线连接不同的段,并且屏蔽导致这些点无法绘制。