Совместное использование динамических осей Aplpy

Есть ли способ, чтобы мультиплотные графики aplpy ​​динамически разделяли оси так, чтобы при перемещении или масштабировании одного из них он перемещался и увеличивал другие?

Я могу добиться этого, используя процедуры imshow и subplot программы matplotlib pyplot, но используя эти ограничения, ограничиваются некоторые другие важные аспекты моего построения графиков, в то время как aplpy ​​предоставляет все инструменты, которые мне нужны для моих изображений.

Я попытался с помощью команд matplotlib cid и функции перецентрировать все изображения в зависимости от местоположения щелчка, но я могу только увеличивать или уменьшать масштаб, а не оба, и я пока не могу щелкнуть и перетащить.

Мой MWE моего кода для построения графиков ниже:

from astropy.io import fits
import matplotlib.pyplot as plt
import aplpy

root = '/my/data/directory/'
data = '3d_image.fits'

hdu = fits.open(root + data)[0]
hdr = hdu.header

fits1 = fits.PrimaryHDU(data = hdu.data[4,:,:], header = hdr)
fits2 = fits.PrimaryHDU(data = hdu.data[6,:,:], header = hdr)

fig = plt.figure(figsize=(15, 15))

f1 = aplpy.FITSFigure(fits1, figure=fig, subplot=[0.1,0.1,0.8,0.35])
f1.show_colorscale(cmap = 'coolwarm', vmin = 8., vmax = 10.5)

f2 = aplpy.FITSFigure(fits2, figure=fig, subplot=[0.1,0.5,0.8,0.35])
f2.show_colorscale(cmap = 'coolwarm', vmin = 1.2, vmax = 1.6)

fig.show

1 ответ

Решение

Кажется, что функциональность построения графиков aplpy ​​полностью основана на matplotlib. Таким образом, любое форматирование графика, которое может быть выполнено с помощью aplpy, может так или иначе быть выполнено с помощью matplotlib.

Но если вы все еще хотите придерживаться aplpy ​​для создания графиков, должно быть решение, которое не требует сложных прослушивателей событий.

К сожалению, в отличие от построения функций других библиотек, aplpy, похоже, принимает в качестве аргумента только цифру, а не оси.

Тем не менее, должна быть возможность связать оси даже после их создания:

axes = fig.get_axes()
axes[0].get_shared_x_axes().join(axes[0], axes[1])
axes[0].get_shared_y_axes().join(axes[0], axes[1])
axes[0].autoscale() # <-- needed if no axes limits are explicitely set.
Другие вопросы по тегам