我有一个名为'my_cube.fits'的FITS文件,带有WCS。该文件具有关于轴1和2(X和Y)的空间信息以及关于轴3(Z)的光谱信息。当我使用 astropy.io.fits 加载它时,光谱轴为0,空间轴为1和2.文件加载如下:
keydown
我一直在使用matplotlib来显示数据,我想知道如何使用其WCS显示我的数据立方体的单个光谱帧。让我们说:
import astropy.io.fits as pyfits
filename = 'my_cube.fits'
my_data = pyfits.getdata(filename)
my_header = pyfits.getheader(filename)
如果我这样做,我有:
from astropy.wcs import WCS
from matplotlib import pyplot as plt
my_wcs = WCS(my_header)
fig = plt.figure()
ax = fig.add_subplot(111, projection=my_wcs)
ax.imshow(my_data[5, :, :])
plt.show()
答案 0 :(得分:9)
您的WCS对象包含两个空间轴和光谱轴,因为您使用完整标题初始化它(我假设您的标题还包含光谱WCS解决方案)。因此,仅使用空间创建2D绘图将不起作用,因为您对子绘图的投影是3D。
我自己没有这样做,也没有示例文件,但WCS文档提到您可以使用the sub function, or even the celestial functions获取单个轴或天体(空间)轴;这些函数将只返回那些轴的WCS对象。
因此,您可以使用以下内容:
my_wcs = WCS(my_header).celestial
fig = plt.figure()
ax = fig.add_subplot(111, projection=my_wcs)
答案 1 :(得分:4)
这是spectral-cube
的一个很好的用例,可以有效地包装astropy.io.fits
以供多维数据集使用。
如果安装了wcsaxes
,Evert的解决方案一旦纠正就会有效。
为此使用spectral_cube
,一个简单的例子是:
cube = SpectralCube.read(filename)
cube[5,:,:].quicklook() # uses aplpy
# using wcsaxes
fig = plt.figure()
ax = fig.add_axes([0.1,0.1,0.8,0.8], projection=cube[5,:,:].wcs)
ax.imshow(cube[5,:,:]) # you may need cube[5,:,:].value depending on mpl version