matplotlib-kleurenbalk in elke subplot

Ik wil graag een aparte kleurenbalk toevoegen aan elke subplot in een 2×2 plot.

fig , ( (ax1,ax2) , (ax3,ax4)) = plt.subplots(2, 2,sharex = True,sharey=True)
z1_plot = ax1.scatter(x,y,c = z1,vmin=0.0,vmax=0.4)
plt.colorbar(z1_plot,cax=ax1)
z2_plot = ax2.scatter(x,y,c = z2,vmin=0.0,vmax=40)
plt.colorbar(z1_plot,cax=ax2)
z3_plot = ax3.scatter(x,y,c = z3,vmin=0.0,vmax=894)
plt.colorbar(z1_plot,cax=ax3)
z4_plot = ax4.scatter(x,y,c = z4,vmin=0.0,vmax=234324)
plt.colorbar(z1_plot,cax=ax4)
plt.show()

Ik dacht dat je het zo doet, maar het resulterende plot is echt in de war; het heeft gewoon een geheel grijze achtergrond en negeert de set_xlim , set_ylim commando’s die ik heb (hier niet getoond voor de eenvoud). + het toont geen kleurenbalken. Is dit de juiste manier om het te doen?

Ik heb ook geprobeerd de “cax = …” kwijt te raken, maar dan gaat de kleurenbalk allemaal naar de plot rechtsonder en niet naar elke afzonderlijke plot!


Antwoord 1, autoriteit 100%

Dit kan eenvoudig worden opgelost met het hulpprogramma make_axes_locatable. Ik geef een minimaal voorbeeld dat laat zien hoe dit werkt en dat gemakkelijk aanpasbaar moet zijn:

balk naar elke afbeelding

import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
import numpy as np
m1 = np.random.rand(3, 3)
m2 = np.arange(0, 3*3, 1).reshape((3, 3))
fig = plt.figure(figsize=(16, 12))
ax1 = fig.add_subplot(121)
im1 = ax1.imshow(m1, interpolation='None')
divider = make_axes_locatable(ax1)
cax = divider.append_axes('right', size='5%', pad=0.05)
fig.colorbar(im1, cax=cax, orientation='vertical')
ax2 = fig.add_subplot(122)
im2 = ax2.imshow(m2, interpolation='None')
divider = make_axes_locatable(ax2)
cax = divider.append_axes('right', size='5%', pad=0.05)
fig.colorbar(im2, cax=cax, orientation='vertical');

Antwoord 2, autoriteit 91%

Gebruik in plt.colorbar(z1_plot,cax=ax1)ax=in plaats van cax=, dwz plt.colorbar(z1_plot,ax=ax1)


Antwoord 3, autoriteit 68%

Bekijk deze matplotlib voorbeeldpagina. Daar wordt getoond hoe je de volgende plot kunt krijgen met vier individuele kleurenbalken voor elke subplot: voer hier afbeeldingsbeschrijving in

Ik hoop dat dit helpt.
U kunt verder hierkijken, waar u veel kunt vinden van wat u kunt doen met matplotlib.


Antwoord 4, autoriteit 59%

Geef het argument axop voor matplotlib.pyplot.colorbar(), bijv.

import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(2, 2)
for i in range(2):
    for j in range(2):
         data = np.array([[i, j], [i+0.5, j+0.5]])
         im = ax[i, j].imshow(data)
         plt.colorbar(im, ax=ax[i, j])
plt.show()

voer hier de afbeeldingsbeschrijving in


Antwoord 5, autoriteit 2%

Probeer de onderstaande functie te gebruiken om een ​​kleurenbalk toe te voegen:

def add_colorbar(mappable):
    from mpl_toolkits.axes_grid1 import make_axes_locatable
    import matplotlib.pyplot as plt
    last_axes = plt.gca()
    ax = mappable.axes
    fig = ax.figure
    divider = make_axes_locatable(ax)
    cax = divider.append_axes("right", size="5%", pad=0.05)
    cbar = fig.colorbar(mappable, cax=cax)
    plt.sca(last_axes)
    return cbar

Vervolgens moeten uw codes worden gewijzigd als:

fig , ( (ax1,ax2) , (ax3,ax4)) = plt.subplots(2, 2,sharex = True,sharey=True)
z1_plot = ax1.scatter(x,y,c = z1,vmin=0.0,vmax=0.4)
add_colorbar(z1_plot)

Other episodes