Pyplot - 如果数据小于零,改变线的颜色?

MCT*_*MCT 10 python matplotlib

我试图弄清楚pyplot中是否有任何内容会根据数据是负数还是正数来改变我的行的颜色.例如,如果它是负的,我希望线条为红色,如果它是正的,我希望线条是不同的颜色,比如黑色.

图书馆里有什么东西让我这样做吗?我想到的一件事是将数据分成两组正面和负面并分别绘制它们,但我想知道是否有更好的方法.

til*_*ten 14

我只想制作两个数据集并设置正确的掩码.通过使用这种方法,我不会在不同的积极部分之间划线.

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()
Run Code Online (Sandbox Code Playgroud)

例

  • 这适用于相当密集的平滑数据点。它对于稀疏线图效果不佳。 (2认同)

Ada*_*dam 6

您可以使用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')
Run Code Online (Sandbox Code Playgroud)

从技术上讲,它将您的数据拆分并绘制成两组,但它相当紧凑和漂亮.

  • 请注意,将在零交叉点之间绘制线条。 (2认同)

Mik*_*ike 5

如果您使用散点图,您可以为每个点指定不同的颜色:

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)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明