I am trying to figure out if there is anything built into pyplot that will change the color of my line depending on whether or not the data is negative or positive. For example, if it is negative I'd like the line to be red and if it's positive I'd like the line to be a different color, say black.
Is there anything in the library that lets me do this? One thing I've thought of is to split the data into two sets of positive and negative and plotting them separately but I'm wondering if there is a better way.
I would just make two datasets and setting the right masks. By using that approach i wont have lines between different positive parts.
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()
You can conditionally plot data in your axes object, using a where
like syntax (if you're used to something like 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')
Technically, it's splitting and plotting your data in two sets, but it's fairly compact and nice.
If you use a scatter plot you can give each point a different color:
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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With