我想弄清楚是否有任何內置到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