绘制适合 matplotlib.imshow 的图像,WCS 作为 x 和 y 轴

Plotting fits image with matplotlib.imshow with WCS as x and y axes

我想知道是否有人知道如何使用 python 包 matplotlib.imshow 绘制适合的图像以及相应的世界坐标系值,甚至可能是赤经或赤纬作为 x 和 y 值而不是物理像素值,类似于此页面的底部图:http://astroplotlib.stsci.edu/page_images.htm

不幸的是,提供的脚本是在 IDL 中...我还不精通...

如果我概述了我的 gridspec 布局,这可能会有所帮助:

fig = pyplot.figure(figsize=(11,11))

gridspec_layout = gridspec.GridSpec(3,3)
gridspec_layout.update(hspace=0.0, wspace=0.0)

hdulist_org_M33_UVM2 = fits.open('myfits.fits')
wcs = WCS(hdulist_org_M33_UVM2[0].header)

pyplot_2 = fig.add_subplot(gridspec_layout[2])

ax = WCSAxes(fig, [0.1, 0.1, 0.8, 0.8], wcs=wcs)

pyplot_2.add_axes(ax)

但运气不好。

非常感谢。

一种解决方案可能是使用 subplot parameter to FITSFigure,并从您的 gridspec 中获取边界。

大致如下:

from matplotlib import pyplot
from matplotlib import gridspec
import aplpy

fig = pyplot.figure(figsize=(11, 11))
gridspec_layout = gridspec.GridSpec(3, 3)
gridspec_layout.update(hspace=0.0, wspace=0.0)
axes = fig.add_subplot(gridspec_layout[2])
m33 = aplpy.FITSFigure('wfpcii.fits', figure=fig,
                       subplot=list(gridspec_layout[2].get_position(fig).bounds),
                       # dimensions and slices are not normally necessary;
                       # my test-figure has 3 axes
                       dimensions=[0, 1], slices=[0])
print(dir(gridspec_layout[2]))
print(gridspec_layout[2].get_position(fig).bounds)
m33.show_colorscale()
pyplot.show()

不是很漂亮,但它会起作用。如果我遇到将 FITSFigure 直接附加到轴的更简单方法,我将修改此答案或添加一个新答案。