Lo strumento Matplotlib make_axes_locatable
consente di aggiungere un nuovo asse sul lato di un asse esistente. Tuttavia, ridimensiona l'asse genitore. c'è un modo per evitarlo?Crea divisore senza modificare la dimensione dell'asse originale?
Ecco un esempio completo mostra il problema e come riprodurlo:
import matplotlib.pyplot as pl
from mpl_toolkits.axes_grid import make_axes_locatable
import matplotlib.axes as maxes
fig = pl.figure()
ax1=pl.subplot(1,3,1)
ax1.imshow([[0,1],[2,0]])
ax1.yaxis.set_visible(False)
ax1.xaxis.set_visible(False)
ax2=pl.subplot(1,3,2)
ax2.imshow([[0,1],[2,0]])
ax2.yaxis.set_visible(False)
ax2.xaxis.set_visible(False)
ax3=pl.subplot(1,3,3)
ax3.imshow([[0,1],[2,0]])
ax3.yaxis.set_visible(False)
ax3.xaxis.set_visible(False)
pl.subplots_adjust(wspace=0)
divider = make_axes_locatable(ax1)
cax1 = divider.new_horizontal(size=0.2, pad=0.0, pack_start=True, axes_class=maxes.Axes)
pl.colorbar(ax1.images[0],cax=cax1)
cax1.yaxis.set_label_position('left')
cax1.yaxis.set_ticks_position('left')
fig.add_axes(cax1)
divider = make_axes_locatable(ax2)
cax2 = divider.new_vertical(size=0.2, pad=0.0, pack_start=True, axes_class=maxes.Axes)
fig.add_axes(cax2)
pl.colorbar(ax2.images[0],cax=cax2,orientation='horizontal')
# thin out the tick labels for visibility
for t in cax2.xaxis.get_majorticklabels()[::2]:
t.set_visible(False)
divider = make_axes_locatable(ax3)
cax3 = divider.new_horizontal(size=0.2, pad=0.0, pack_start=False, axes_class=maxes.Axes)
pl.colorbar(ax3.images[0],cax=cax3)
fig.add_axes(cax3)
Il problema è che le sottotrame sono ora diverse dimensioni. Penso che la sinistra e la destra si siano ristrette, ma la metà non è cambiata.
La differenza "estetica" è a causa dei miei elementi di configurazione di default; Ho 'interpolation =' closest'' impostato di default. – keflavich
Questo approccio generale sembra funzionare, ma sarebbe molto meglio se ci fosse un modo per generare automaticamente la larghezza/altezza/posizione verticale/orizzontale piuttosto che il loro hard-code. – keflavich