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:
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:
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 ax
op 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()
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)