Beim Erstellen eines Diagramms mit matplotlib ragt der Farbbalken aus dem Diagramm heraus und ist umständlich. Ich werde Ihnen zeigen, wie Sie die Farbbalken im Diagramm ausrichten.
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')
Ein Beispiel, bei dem die Höhe des Hauptdiagramms und des Farbbalkens zufällig gleich waren.
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')
Sobald das Seitenverhältnis des Hauptdiagramms zusammenbricht, ragt der Farbbalken nach oben und unten heraus. traurig. .. ..
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')
Das häufigste Beispiel im Netz. Verwendung von make_axes_locatable und append_axes in mpl_toolkits.axes_grid1. Das ist die Lösung. Es war gut.
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')
Die Farbleiste wird nicht angezeigt! ?? Weil type (cax) matplotlib.projections.polar.PolarAxes ist. append_axes () hat kein Projektionsargument und scheint die Projektion von ax so zu verwenden, wie sie ist. Ist es möglich, die Projektion irgendwie zu ändern? .. ..
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')
Ich konnte die Position von ax mit get_position () ermitteln und mit set_position () von cax vertikal ausrichten. Da ax.get_position () jedoch eine Spezifikation (?) Hat, die erst aktualisiert wird, wenn fig.savefig () ausgeführt wird, wird fig.savefig () zweimal aufgerufen. Diese Methode wird in fig.savefig verwendet (bbox_inches = 'tight').