I'm making a scatter plot which looks like this:
(MWE at bottom of question)
As can be seen in the image above the colors of the points in the legend are set to blue automatically by matplotlib
. I need to set this points to some other color not present in the colormap (ie: black) so they won't generate confusion with the colors associated with said colormap.
I looked around but the matplotlib.legend module does not seem to accept a color
keyword. Is there any way to do this?
Here's the MWE:
import matplotlib.pyplot as plt import numpy as np def rand_data(): return np.random.uniform(low=0., high=1., size=(100,)) # Generate data. x, y, x2, x3 = [rand_data() for i in range(4)] # This data defines the markes and labels used. x1 = np.random.random_integers(7, 9, size=(100,)) # Order all lists so smaller points are on top. order = np.argsort(-np.array(x2)) # Order x and y. x_o, y_o = np.take(x, order), np.take(y, order) # Order list related to markers and labels. z1 = np.take(x1, order) # Order list related to sizes. z2 = np.take(x2, order) # Order list related to colors. z3 = np.take(x3, order) plt.figure() cm = plt.cm.get_cmap('RdYlBu') # Scatter plot where each value in z1 has a different marker and label # assigned. mrk = {7: ('o', '7'), 8: ('s', '8'), 9: ('D', '9')} for key, value in mrk.items(): s1 = (z1 == key) plt.scatter(x_o[s1], y_o[s1], marker=value[0], label=value[1], s=z2[s1] * 100., c=z3[s1], cmap=cm, lw=0.2) # Plot colorbar plt.colorbar() # Plot legend. plt.legend(loc="lower left", markerscale=0.7, scatterpoints=1, fontsize=10) plt.show()
To place the legend, use legend() method with location of the legend and store the returned value to set the color of the text. To set the color of the text, use set_color() method with green color. To display the figure, use show() method.
To change the position of a legend in Matplotlib, you can use the plt. legend() function. The default location is “best” – which is where Matplotlib automatically finds a location for the legend based on where it avoids covering any data points.
You can obtain the legend handles and change their colors individually:
ax = plt.gca() leg = ax.get_legend() leg.legendHandles[0].set_color('red') leg.legendHandles[1].set_color('yellow')
You can retrieve the label of each legend handle with lh.get_label()
if you want to map colors to specific labels.
For my purposes it worked best to create a dict from legendHandles
and change the colors like so:
ax = plt.gca() leg = ax.get_legend() hl_dict = {handle.get_label(): handle for handle in leg.legendHandles} hl_dict['9'].set_color('red') hl_dict['8'].set_color('yellow')
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