我想弄清楚是否有任何内置到pyplot中的内容会根据数据是否为负值或正值而改变线路的颜色。例如,如果它是负面的,我希望线条是红色的,如果是正面的,我希望线条是不同的颜色,比如说黑色。Pyplot - 如果数据小于零,则更改行的颜色?
图书馆里有什么东西让我这样做?我想到的一件事是将数据分成两组正面和负面的分开绘制它们,但我想知道是否有更好的方法。
我想弄清楚是否有任何内置到pyplot中的内容会根据数据是否为负值或正值而改变线路的颜色。例如,如果它是负面的,我希望线条是红色的,如果是正面的,我希望线条是不同的颜色,比如说黑色。Pyplot - 如果数据小于零,则更改行的颜色?
图书馆里有什么东西让我这样做?我想到的一件事是将数据分成两组正面和负面的分开绘制它们,但我想知道是否有更好的方法。
我只做两个数据集并设置正确的掩码。 通过使用这种方法,我不会有不同的积极 部分之间的线。
import matplotlib.pyplot as plt
import numpy as np
signal = 1.2*np.sin(np.linspace(0, 30, 2000))
pos_signal = signal.copy()
neg_signal = signal.copy()
pos_signal[pos_signal <= 0] = np.nan
neg_signal[neg_signal > 0] = np.nan
#plotting
plt.style.use('fivethirtyeight')
plt.plot(pos_signal, color='r')
plt.plot(neg_signal, color='b')
plt.savefig('pos_neg.png', dpi=200)
plt.show()
您可以使用where
类似的语法(如果您习惯于Pandas之类的情况)有条件地绘制轴对象中的数据。
ax.plot(x[f(x)>=0], f(x)[f(x)>=0], 'g')
ax.plot(x[f(x)<0], f(x)[f(x)<0], 'r')
从技术上讲,它是分裂和绘制你的数据在两套,但它是相当紧凑和好。
注意,将零个交叉之间的情节线索。 – tillsten
如果使用散点图可以给每个点不同的颜色:
x = range(1)
x = range(10)
y = [i - 5 for i in x]
c = [i < 0 for i in y]
plt.scatter(x, y, c=c, s=80)
我使用这个实现,它似乎工作,所以谢谢。另外,我正在挖掘那些银色风格的图表。当我尝试使用.style.use时,它说该模块没有这个名称 - 你知道那里发生了什么吗? – MCT
旧的matplotlib,只是注释掉该行。 – tillsten
在新的matplotlib中是“样式”吗?我希望能够使用这种风格 – MCT