[PYTHON] Alignez la taille de la barre de couleurs avec matplotlib

Qu'est-ce que c'est

Lors de la création d'un graphique avec matplotlib, la barre de couleur sort du graphique et est gênante. Je vais vous montrer comment aligner les barres de couleur sur le graphique.

Diverses méthodes

1: tracer normalement

colorbar1.py


import numpy
import matplotlib.pyplot

x = numpy.arange(10)
y = numpy.arange(10)
X, Y = numpy.meshgrid(x, y)
Z = X**2. + Y**2.

fig = matplotlib.pyplot.figure()
ax = fig.add_subplot(111)
im = ax.imshow(Z, interpolation='none')
fig.colorbar(im)

fig.savefig('colorbar1.png')

colorbar1.png

Un exemple où la hauteur du graphique principal et la barre de couleur se sont avérées identiques.

2: tracer normalement (version désolée)

colorbar2.py


import numpy
import matplotlib.pyplot

x = numpy.arange(15)
y = numpy.arange(10)
X, Y = numpy.meshgrid(x, y)
Z = X**2. + Y**2.

fig = matplotlib.pyplot.figure()
ax = fig.add_subplot(111)
im = ax.imshow(Z, interpolation='none')
fig.colorbar(im)

fig.savefig('colorbar2.png')

colorbar2.png

Une fois le rapport hauteur / largeur du graphique principal réduit, la barre de couleur dépasse de haut en bas. triste. .. ..

3: Utilisez mpl_toolkits.axes_grid1

colorbar3.py


import numpy
import matplotlib.pyplot
import mpl_toolkits.axes_grid1

x = numpy.arange(15)
y = numpy.arange(10)
X, Y = numpy.meshgrid(x, y)
Z = X**2. + Y**2.

fig = matplotlib.pyplot.figure()
ax = fig.add_subplot(111)
divider = mpl_toolkits.axes_grid1.make_axes_locatable(ax)
cax = divider.append_axes('right', '5%', pad='3%')
im = ax.imshow(Z, interpolation='none')
fig.colorbar(im, cax=cax)

fig.savefig('colorbar3.png')

colorbar5.png

L'exemple le plus courant sur le net. Comment utiliser make_axes_locatable et append_axes dans mpl_toolkits.axes_grid1. Voilà la solution. C'était bon.

4: Mais si vous spécifiez la projection, ...

colorbar4.py


import numpy
import matplotlib.pyplot
import mpl_toolkits.axes_grid1

x = numpy.arange(15)
y = numpy.arange(10)
X, Y = numpy.meshgrid(x, y)
Z = X**2. + Y**2.

fig = matplotlib.pyplot.figure()
ax = fig.add_subplot(111, projection='polar')
divider = mpl_toolkits.axes_grid1.make_axes_locatable(ax)
cax = divider.append_axes('right', '5%', pad='3%')
im = ax.imshow(Z, interpolation='none')
fig.colorbar(im, cax=cax)

fig.savefig('colorbar4.png')

colorbar6.png

La barre de couleur ne s'affiche pas! ?? Parce que le type (cax) est matplotlib.projections.polar.PolarAxes. append_axes () n'a pas d'argument de projection et semble utiliser la projection de ax telle quelle. Est-il possible de changer la projection d'une manière ou d'une autre? .. ..

5: Changez vous-même de position

colorbar4.py


import io
import numpy
import matplotlib.pyplot

x = numpy.arange(15)
y = numpy.arange(10)
X, Y = numpy.meshgrid(x, y)
Z = X**2. + Y**2.

fig = matplotlib.pyplot.figure()
ax = fig.add_subplot(111)
im = ax.imshow(Z, interpolation='none')
cax = fig.colorbar(im)

fig.savefig(io.BytesIO())

ax_pos = ax.get_position()
cax_pos0 = cax.ax.get_position()
cax_pos1 = [cax_pos0.x0, ax_pos.y0, cax_pos0.x1 - cax_pos0.x0, ax_pos.y1 - ax_pos.y0]
cax.ax.set_position(cax_pos1)

fig.savefig('colorbar5.png')

colorbar9.png

J'ai pu obtenir la position de ax avec get_position () et l'aligner verticalement en utilisant set_position () de cax. Cependant, comme ax.get_position () a une spécification (?) Qui n'est pas mise à jour tant que fig.savefig () n'est pas exécutée, fig.savefig () sera appelée deux fois. Cette méthode est la méthode utilisée dans fig.savefig (bbox_inches = 'tight').

Recommended Posts

Alignez la taille de la barre de couleurs avec matplotlib
Augmentez la taille de la police du graphique avec matplotlib
À propos de la taille des points dans matplotlib
Alignez la barre de couleurs sur la figure avec matplotlib
La base de la théorie des graphes avec l'animation matplotlib
Visualisez le comportement de l'algorithme de tri avec matplotlib
Aligner la version de chromedriver_binary
Ajoutez des informations au bas de la figure avec Matplotlib
Changer le style de matplotlib
Ajustez le rapport de plusieurs chiffres avec le gridspec de Matplotlib
Reformatez l'axe des temps du graphique de la série chronologique des pandas avec matplotlib
Visualisons le nombre de personnes infectées par le virus corona avec matplotlib
J'ai écrit le fonctionnement de base de matplotlib dans Jupyter Lab
Augmenter la taille de l'interface utilisateur de MyPaint
Augmentez ultérieurement la taille du disque de Fedora CoreOS déployé avec OVA
J'ai essayé d'agrandir la taille du volume logique avec LVM
[Python] Définissez la plage du graphique avec matplotlib
Ajustez l'espacement entre les chiffres avec Matplotlib
Vérifier l'existence du fichier avec python
Définissez la couleur des xticklabels individuellement avec matplotlib
La troisième nuit de la boucle avec pour
Astuces: Comparaison de la taille de trois valeurs
Afficher les marqueurs au-dessus de la bordure avec matplotlib
La deuxième nuit de la boucle avec pour
Vérifiez la taille du fichier avec du -sh *
Compter le nombre de caractères avec écho
Définissez les paramètres communs avec le sous-graphique de matplotlib
[Python] Comment spécifier la position d'affichage de la fenêtre et la taille de matplotlib
Ajustez la largeur du bac de manière nette et précise avec l'histogramme de matplotlib et seaborn
Comment attribuer plusieurs valeurs à la barre de couleurs Matplotlib
L'histoire de l'apprentissage profond avec TPU
Préparer l'environnement d'exécution de Python3 avec Docker
À propos de la notation de l'axe X du graphique à barres de Matplotlib
[Python] axe limite du graphe 3D avec Matplotlib
Mathématiques Todai 2016 résolues avec Python
Changer la taille de police de la légende dans df.plot
Conseils de dessin avec matplotlib côté serveur
[Note] Exportez le html du site avec python.
Calculez le nombre total de combinaisons avec python
Vérifiez la date du devoir de drapeau avec Python
Une doublure qui répertorie les couleurs de matplotlib
Éliminez les inconvénients du widget QDock avec PySide
Défiez la tour de Hanoi avec recurs + stack
Renommer la balise avec un espace de noms en lxml
Remplissez la largeur du bloc-notes Jupyter pour remplir le navigateur
Animation avec matplotlib
Prédisez le deuxième tour de l'été 2016 avec scikit-learn
Japonais avec matplotlib
Vider le contenu de la base de données redis avec lua
Découvrez le jour par date / heure
Code pour vérifier le fonctionnement de Python Matplot lib
Animation avec matplotlib
Aligner les couleurs du graphique Matplotlib avec des couleurs similaires (carte des couleurs)
histogramme avec matplotlib
[Vérification] Essayez d'aligner le groupe de points avec la fonction d'optimisation de pytorch Partie 1
Convertir le code de caractère du fichier avec Python3