Définition d'une taille fixe pour les points dans la légende
Je suis en train de faire quelques nuages de points et je veux régler la taille des points dans la légende d'un fixe, de valeur égale.
Maintenant j'ai ceci:
import matplotlib.pyplot as plt
import numpy as np
def rand_data():
return np.random.uniform(low=0., high=1., size=(100,))
# Generate data.
x1, y1 = [rand_data() for i in range(2)]
x2, y2 = [rand_data() for i in range(2)]
plt.figure()
plt.scatter(x1, y1, marker='o', label='first', s=20., c='b')
plt.scatter(x2, y2, marker='o', label='second', s=35., c='r')
# Plot legend.
plt.legend(loc="lower left", markerscale=2., scatterpoints=1, fontsize=10)
plt.show()
qui produit ce:
La taille des points dans la légende sont mis à l'échelle, mais pas le même. Comment puis-je fixer la taille des points dans la légende d'une valeur égale sans affecter les tailles dans le scatter
intrigue?
source d'informationauteur Gabriel
Vous devez vous connecter pour publier un commentaire.
J'ai eu un coup d'oeil dans le code source de
matplotlib
. Mauvaise nouvelle, c'est qu'il ne semble pas y avoir une façon simple de régler l'égalité des tailles de points dans la légende. Il est particulièrement difficile avec des nuages de points (mal: voir la mise à jour ci-dessous). Il y a essentiellement deux alternatives:maplotlib
codePathCollection
des objets représentant les points dans l'image. La transformation (mise à l'échelle) a pour prendre la taille en considération.N'est pas très amusant, bien que #1 semble être plus facile. Le
scatter
parcelles sont particulièrement difficiles à cet égard.Cependant, j'ai un hack qui est probablement ce que vous voulez:
Cela donne:
Qui semble être ce que tu voulais.
Les modifications:
scatter
changé en unplot
ce qui change le marqueur de mise à l'échelle (d'où lesqrt
) et rend impossible l'utilisation du changement de marqueur de taille (si c'était prévu)Comme vous pouvez le voir, il utilise caché soulignent les propriétés (
_legmarker
) et le bug est moche. Il peut se décomposer à une mise à jour dematplotlib
.Mise à jour
Haa, je l'ai trouvé. Un meilleur hack:
Maintenant la
_sizes
(un autre trait de soulignement de la propriété) fait le tour. Pas besoin de toucher à la source, même si c'est un hack. Mais maintenant, vous pouvez utiliser toutscatter
offre.De même pour la réponse, en supposant que vous voulez tous les marqueurs avec la même taille:
Avec MatPlotlib 2.0.0