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.
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')
Un exemple où la hauteur du graphique principal et la barre de couleur se sont avérées identiques.
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')
Une fois le rapport hauteur / largeur du graphique principal réduit, la barre de couleur dépasse de haut en bas. triste. .. ..
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')
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.
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')
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? .. ..
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')
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