Establecer manualmente el color de los puntos en la leyenda.

Estoy haciendo un diagtwig de dispersión que se ve así:

introduzca la descripción de la imagen aquí

(MWE en la parte inferior de la pregunta)

Como se puede ver en la imagen de arriba, los colores de los puntos en la leyenda se configuran en azul automáticamente con matplotlib . Necesito establecer estos puntos en algún otro color que no esté presente en el mapa de colores (es decir, en negro) para que no generen confusión con los colores asociados con dicho mapa de colores.

Miré a mi alrededor, pero el módulo matplotlib.legend no parece aceptar una palabra clave de color . ¿Hay alguna manera de hacer esto?


Aquí está el 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() 

Puedes obtener los tiradores de leyenda y cambiar sus colores haciendo:

 ax = plt.gca() leg = ax.get_legend() leg.legendHandles[0].set_color('red') leg.legendHandles[1].set_color('yellow') 

Puede recuperar la etiqueta de cada controlador de leyenda con lh.get_label() si desea asignar colores a tags específicas.

Para mis propósitos, funcionó mejor crear un dictado de legendHandles y cambiar los colores así:

 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')