Narzędzie Matplotlib: make_axes_locatable
umożliwia dodanie nowej osi do boku istniejącej osi. Zmienia jednak rozmiar osi nadrzędnej. Czy istnieje sposób, aby tego uniknąć?Utwórz dzielnik bez zmiany rozmiaru oryginalnej osi?
Poniżej znajduje się pełna przykład pokazujący problem i jak go odtworzyć:
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)
Problemem jest to, że teraz wątków są różne rozmiary. Myślę, że lewa i prawa skurczyły się, ale środek pozostaje niezmieniony.
W "estetyczny" Różnica polega na tym, ponieważ z moich pozycji domyślnej konfiguracji; Domyślnie ustawiony jest 'interpolation = 'nearest''. – keflavich
To ogólne podejście wydaje się działać, ale byłoby znacznie lepiej, gdyby istniał sposób automatycznego generowania szerokości/wysokości/pozycji pionowej/poziomej, zamiast twardego kodowania ich. – keflavich