Aplpy多色动态轴共享

时间:2017-03-10 12:48:10

标签: python matplotlib interactive axes 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

1 个答案:

答案 0 :(得分:4)

似乎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.