Applpy多图动态轴共享
Aplpy multiplot dynamic axis sharing
有什么方法可以使多图 aplpy 图动态共享轴,以便在移动或缩放其中一个时,它会移动和缩放其他图?
我可以使用 matplotlib pyplot 的 imshow 和 subplot 例程来实现效果,但是使用这些例程会限制我绘图的其他一些重要方面,而 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
看来aplpy的绘图功能完全基于matplotlib。因此,可以使用 aplpy 完成的任何绘图格式都可以通过一种方式或另一种方式使用 matplotlib 完成。
但是如果你仍然想坚持使用 aplpy 来创建绘图,应该仍然有一个不需要复杂事件监听器的解决方案。
不幸的是,与其他库的绘图功能不同,aplpy 似乎只接受图形作为参数,而不是轴。
尽管如此,即使在创建坐标轴之后也应该可以 link 坐标轴:
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.
有什么方法可以使多图 aplpy 图动态共享轴,以便在移动或缩放其中一个时,它会移动和缩放其他图?
我可以使用 matplotlib pyplot 的 imshow 和 subplot 例程来实现效果,但是使用这些例程会限制我绘图的其他一些重要方面,而 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
看来aplpy的绘图功能完全基于matplotlib。因此,可以使用 aplpy 完成的任何绘图格式都可以通过一种方式或另一种方式使用 matplotlib 完成。
但是如果你仍然想坚持使用 aplpy 来创建绘图,应该仍然有一个不需要复杂事件监听器的解决方案。
不幸的是,与其他库的绘图功能不同,aplpy 似乎只接受图形作为参数,而不是轴。
尽管如此,即使在创建坐标轴之后也应该可以 link 坐标轴:
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.