Issue
I am working with line plots using:
x = np.arange(25,55,5)
y = np.random.randint(10000,50000,6)
y2 = np.random.randint(10000,60000,6)
Then the main plotting code is:
plt.style.use('fivethirtyeight')
plt.xlabel("some random ages")
plt.ylabel('some random salaries')
plt.title('whatever')
plt.legend(['first','second'])
plt.plot(x,y)
plt.plot(x,y2)
plt.fill_between(x,y,color = 'blue', alpha = 0.25, where = (y>np.median(y)), interpolate =True,
label = 'above median')
#Colour blue for salaries more than the median.
plt.fill_between(x,y,color = 'red', alpha = 0.25, where = (y<=np.median(y)), interpolate =True,
label = 'below median')
#Colour red for salaries less than the median.
plt.show()
The filling is working as intended, however the plot legends only have the entries specified in plt.legend()
. The label argument, which seems to work in the tutorial video I am watching as well as every other site I have seen, does not add the intended labels to the legends. I had the same problem in stack plots, where the tutor, who is using pycharm, used labels
to add legend to the satckplot, and I had to use plt.legend
because the labels
command seemed to do nothing. However here I don't know how to add the legends for the fill colours along with the legends for the main line plots.
I am using the latest version of jupyter notebook and latest python version on macOS Monterey 12.4.
Solution
Either specify your label
s in all places:
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(0)
x = np.arange(25,55,5)
y = np.random.randint(10000,50000,6)
y2 = np.random.randint(10000,60000,6)
plt.style.use('fivethirtyeight')
plt.plot(x,y, label='red')
plt.plot(x,y2, label='blue')
#Colour blue for salaries more than the median.
plt.fill_between(x,y,color = 'blue', alpha = 0.25, where = (y>np.median(y)), interpolate =True,
label = 'above median')
#Colour red for salaries less than the median.
plt.fill_between(x,y,color = 'red', alpha = 0.25, where = (y<=np.median(y)), interpolate =True,
label = 'below median')
plt.xlabel("some random ages")
plt.ylabel('some random salaries')
plt.title('whatever')
plt.legend()
plt.show()
or specify all labels in the legend parameters:
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(0)
x = np.arange(25,55,5)
y = np.random.randint(10000,50000,6)
y2 = np.random.randint(10000,60000,6)
plt.style.use('fivethirtyeight')
plt.plot(x,y)
plt.plot(x,y2)
#Colour blue for salaries more than the median.
plt.fill_between(x,y,color = 'blue', alpha = 0.25, where = (y>np.median(y)), interpolate =True)
#Colour red for salaries less than the median.
plt.fill_between(x,y,color = 'red', alpha = 0.25, where = (y<=np.median(y)), interpolate =True)
plt.xlabel("some random ages")
plt.ylabel('some random salaries')
plt.title('whatever')
plt.legend(['red', 'blue', 'above', 'below'])
plt.show()
Note that the first method is the recommended one (as noted by @JohanC) because it does the job for you and it adds the labels automatically. In the second, you are overwriting what is in the legend. That is what happened in your example -- you defined your labels in the label
argument and then you passed a list to the legend
function which overrides your label
s.
Answered By - My Work
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.