Définir manuellement la couleur des points dans la légende
Je suis en train de faire un nuage de points qui ressemble à ceci:
(MWE au fond de la question)
Comme on peut le voir dans l'image ci-dessus, les couleurs des points dans la légende sont mis à blue automatiquement par matplotlib
. J'ai besoin de ces points pour certaines autres couleurs n'est pas présent dans la palette des couleurs (ie: noir) pour ne pas générer de la confusion avec les couleurs associées à ladite palette de couleurs.
J'ai regardé autour de mais la matplotlib.légende module ne semble pas accepter un color
mot-clé. Est-il possible de faire cela?
Voici la 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()
OriginalL'auteur Gabriel | 2014-05-16
Vous devez vous connecter pour publier un commentaire.
Vous pouvez obtenir la légende des poignées et de changer leurs couleurs:
Avez-vous déjà essayé de faire cela lorsque vous tracez certains points à l'aide de
plt.plot
plutôt queplt.scatter
? Ne fonctionne pas pour moi. L'exécution de mpl v 2.0.0.Pas de soucis. C'est beaucoup de code pour un commentaire. Voici un jupyter portable sur Github. Je vous remercie de votre intérêt.
il semble y avoir un bug, si ça fonctionne ou pas dépend du style de trait que vous choisissez, case
Ok, j'ai déposé une question sur Github. Je vous remercie.
OriginalL'auteur Saullo G. P. Castro
Vous pouvez récupérer l'étiquette de chaque légende de la poignée avec
lh.get_label()
si vous voulez des couleurs de la carte de labels spécifiques.Pour mes fins, il a travaillé pour créer un dict de legendHandles et changer les couleurs de la sorte:
OriginalL'auteur apteryx