103 votes

Une barre de couleur logarithmique dans un graphique de dispersion matplotlib

Je voudrais que les couleurs des points sur le nuage de points correspondent à la valeur de la fraction de vide, mais sur une échelle logarithmique pour amplifier les différences. J'ai fait cela, mais maintenant quand je fais plt.colorbar(), il affiche le logarithme de la fraction de vide, alors que je veux vraiment la fraction de vide réelle. Comment puis-je créer une échelle logarithmique sur la barre de couleur avec les étiquettes appropriées de la fraction de vide, qui appartient à [0,00001,1] ?

Voici une image du graphique que j'ai maintenant, mais la barre de couleur de la fraction de vide n'est pas correctement étiquetée pour correspondre à la véritable fraction de vide, au lieu du logarithme de celle-ci.

graphique actuel

fig = plt.figure()
plt.scatter(x,y,edgecolors='none',s=marker_size,c=np.log(void_fraction))
plt.colorbar()
plt.title('Barre de couleur : fraction de vide')

Merci pour votre aide.

132voto

tcaswell Points 21489

Il existe maintenant une section de la documentation décrivant comment fonctionnent le mappage des couleurs et la normalisation

La façon dont matplotlib effectue le mappage des couleurs se fait en deux étapes : d'abord une fonction Normalize (encapsulée par les sous-classes de matplotlib.colors.Normalize) qui mappe les données que vous fournissez à [0, 1]. La deuxième étape mappe les valeurs dans [0,1] -> espace RGBA.

Vous devez simplement utiliser la classe de normalisation LogNorm, passée avec l'argument kwarg norm.

plt.scatter(x,y,edgecolors='none',s=marker_size,c=fraction_vide,
                norm=matplotlib.colors.LogNorm())

Lorsque vous souhaitez redimensionner / ajuster les données pour le tracé, il est préférable de laisser matplotlib effectuer les transformations plutôt que de le faire vous-même.

  • Normalize doc
  • LogNorm doc
  • matplotlib.color doc

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X