Разделение совместного графика динамической оси 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.