Инструмент Matplotlib make_axes_locatable
позволяет прикрепить новую ось на сторону существующей оси. Однако он изменяет размеры родительской оси. Есть ли способ избежать этого?Сделать разделитель без изменения размера исходной оси?
Ниже приведен полный пример, показывающий проблему и как ее воспроизвести:
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)
Проблема заключается в том, что подзаговоры теперь разные размеры. Я думаю, что левые и правые сократились, но середина не изменилась.
"эстетическая" разница из-за мои элементы конфигурации по умолчанию; По умолчанию устанавливается 'интерполяция = 'ближайшая'. – keflavich
Этот общий подход, похоже, работает, но было бы намного лучше, если бы был способ автоматически генерировать ширину/высоту/вертикальную/горизонтальную позицию, а не жестко кодировать их. – keflavich