Je ne peux pas obtenir la barre de couleurs sur les graphiques imshow comme celui-ci à la même hauteur que le graphique, à moins d'utiliser Photoshop après coup. Comment faire correspondre les hauteurs?
python
image
matplotlib
Elliot
la source
la source
fraction
oushrink
args.Réponses:
Vous pouvez le faire facilement avec un AxisDivider matplotlib .
L'exemple de la page liée fonctionne également sans utiliser de sous-graphiques:
la source
plt.title
, il sera affiché inversé vers la droite. Y a-t-il un moyen de surmonter cela?Cette combinaison (et des valeurs proches de celles-ci) semble fonctionner "comme par magie" pour que je garde la barre de couleurs à l'échelle du tracé, quelle que soit la taille de l'affichage.
Il ne nécessite pas non plus de partager l'axe qui peut extraire le tracé du carré.
la source
im_ratio = data.shape[0]/data.shape[1]
plt.colorbar(im,fraction=0.046*im_ratio, pad=0.04)
oùdata
est votre image.@bogatron a déjà donné la réponse suggérée par la documentation matplotlib , qui produit la bonne hauteur, mais cela introduit un problème différent. Désormais, la largeur de la barre de couleurs (ainsi que l'espace entre la barre de couleurs et le tracé) change avec la largeur du tracé. En d'autres termes, le rapport hauteur / largeur de la barre de couleurs n'est plus fixe.
Pour obtenir à la fois la bonne hauteur et un rapport hauteur / largeur donné, vous devez creuser un peu plus le
axes_grid1
module mystérieux .Notez que cela spécifie la largeur de la barre de couleurs par rapport à la hauteur du tracé (contrairement à la largeur de la figure, comme avant).
L'espacement entre la barre de couleur et le tracé peut maintenant être spécifié comme une fraction de la largeur de la barre de couleur, qui est à mon humble avis un nombre beaucoup plus significatif qu'une fraction de la largeur de la figure.
METTRE À JOUR:
J'ai créé un cahier IPython sur le sujet , dans lequel j'ai emballé le code ci-dessus dans une fonction facilement réutilisable:
Il peut être utilisé comme ceci:
la source
J'apprécie toutes les réponses ci-dessus. Cependant, comme certaines réponses et commentaires ont fait remarquer, le
axes_grid1
module ne peut répondre à GeoAxes, alors que le réglagefraction
,pad
,shrink
et d' autres paramètres similaires ne peut pas donner nécessairement l'ordre très précis, ce qui me dérange vraiment. Je pense que donner lecolorbar
sienaxes
pourrait être une meilleure solution pour résoudre tous les problèmes qui ont été mentionnés.Code
Résultat
Plus tard, je trouve
matplotlib.pyplot.colorbar
que la documentation officielle donne égalementax
options, qui sont des axes existants qui fourniront de la place pour la barre de couleurs. Par conséquent, il est utile pour plusieurs sous-graphiques, voir ci-dessous.Code
Résultat
Encore une fois, vous pouvez également obtenir des effets similaires en spécifiant cax, une manière plus précise de mon point de vue.
Code
Résultat
la source
Lorsque vous créez le
colorbar
essai à l'aide des paramètres de fraction et / ou de réduction.À partir des documents:
la source
colorbar()
fonction ou de la méthode.Toutes les solutions ci-dessus sont bonnes, mais j'aime les meilleures de @ Steve et @ bejota car elles n'impliquent pas d'appels sophistiqués et sont universelles.
Par universel, je veux dire qui fonctionne avec tout type d'axes, y compris
GeoAxes
. Par exemple, si vous avez des axes projetés pour le mappage:un appel à
échouera avec:
KeyException: map_projection
Par conséquent, le seul moyen universel de gérer la taille de la barre de couleurs avec tous les types d'axes est:
Travaillez avec une fraction de 0,035 à 0,046 pour obtenir votre meilleure taille. Cependant, les valeurs de la fraction et du paddig devront être ajustées pour obtenir le meilleur ajustement pour votre tracé et différeront selon si l'orientation de la barre de couleurs est en position verticale ou horizontale.
la source
shrink
paramètre lorsquefraction
ainsipad
ne produisent pas assez les résultats souhaités.