fit文件是天文中常用的数据存储格式
from astropy.io import fits
inten = fits.open("1077910616_deep-MFS-image-pb_warp.fits")
inten.info()
1
可以看到这个fit文件里面有一条数据,并且是400040001*1的矩阵,数据格式是float64双精度型
inten[0].header
或者在终端通过以下命令也可以得到对应的表头信息
more 1077910616_deep-MFS-image-pb_warp.fits
有些fit文件在写入的时候轴的位置错乱了,导致读取的图片不能够正确显示经纬度,如下:
我们可以看到横坐标是像素点而不是经纬度
查看一下该fit文件的head,发现第三个轴放在了第一个轴上
from astropy.io import fits
from astropy.wcs import WCS
import matplotlib.pyplot as plt
import numpy as np
from astropy.io import fits as pf
from copy import deepcopy
hdu = fits.open('FDF_maxPI.fits')[0]
hdr0 = deepcopy(hdu.header) #深拷贝,改变hdu的值不会对hdr0产生改变
print(hdr0)
hdr = pf.Header({ 'SIMPLE': True,
'BITPIX': -32,
'NAXIS': 3,
'NAXIS1': hdr0['NAXIS2'],
'NAXIS2': hdr0['NAXIS3'],
'NAXIS3': hdr0['NAXIS1'],
'CDELT1': hdr0['CDELT2'],
'CRVAL1': hdr0['CRVAL2'],
'CRPIX1': hdr0['CRPIX2'],
'CTYPE1': hdr0['CTYPE2'],
'CDELT2': hdr0['CDELT3'],
'CRPIX2': hdr0['CRPIX3'],
'CRVAL2': hdr0['CRVAL3'],
'CTYPE2': hdr0['CTYPE3'],
'CDELT3': hdr0['CDELT1'],
'CRPIX3': hdr0['CRPIX1'],
'CRVAL3': hdr0['CRVAL1'],
'CTYPE3': hdr0['CTYPE1'],
'EQUINOX': 2000.00,
'EXTEND':True
})
pf.writeto('FDF_maxPI_new.fits', hdu.data, hdr, overwrite=True)
#也可以把其他信息都写进入,这种写入的方式是完全覆盖,而不是单纯的修改。
#读取包,有些是非必须的,我只是顺手放进来
from astropy.coordinates import sky_coordinate
from astropy.io import fits
from astropy.utils.console import color_print
import matplotlib.pyplot as plt
import numpy as np
import astropy.units as u
from astropy.wcs import WCS
from astropy import units as u
import csv
from numpy.lib.function_base import append
import pandas as pd
#读取csv文件的ra和dec,panda提供非常方便的读取方式
data= pd.read_csv(r'catalog_comp.csv')
ra = data['ra']
dec = data['dec']