You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python读取.fits文件绘制指定列失败,求替代方法及读取方案

嘿,我来帮你搞定这个FITS文件的问题~首先得说,你用plt.plotfile()的思路走偏啦,这个函数是给CSV、TXT这类文本格式的表格文件设计的,而FITS是天文领域专用的二进制格式文件,结构完全不一样,所以直接这么用肯定读不出来。下面给你两种靠谱的替代方案,先从最基础的读取数据说起:

第一步:用Astropy正确读取FITS数据表

现在业内推荐用astropy.io.fits来处理FITS文件——毕竟老的pyfits已经停止维护,Astropy是现在的主流工具。

首先确保你装了Astropy:

pip install astropy

然后执行以下代码读取文件:

from astropy.io import fits
import matplotlib.pyplot as plt

# 打开FITS文件,得到HDU(Header Data Unit)列表
hdul = fits.open('3XMM_DR5.fits')

# 先看看文件里有哪些HDU,确认哪个是数据表(通常是BinTableHDU类型)
print(hdul.info())

# 一般来说,第一个HDU是表头信息,第二个才是数据表(索引为1)
table_data = hdul[1].data

# 用完记得关闭文件
hdul.close()

如果不知道列名,还可以打印所有列的信息:

print(table_data.columns)
第二步:提取数据并绘图

拿到数据表后,你可以按列名或者索引提取数据,然后绘图:

方式1:按列名提取(推荐,更清晰)

# 替换成你实际需要的列名,比如RA、FLUX之类的
x_data = table_data['第一列名称']
y_data = table_data['第二列名称']

# 绘图(用散点还是线,根据你的数据类型调整)
plt.figure(figsize=(10, 6))
plt.plot(x_data, y_data, 'g.', markersize=3)
plt.xlabel('X轴描述')
plt.ylabel('Y轴描述')
plt.title('3XMM DR5 数据可视化')
plt.grid(True)
plt.show()

方式2:按索引提取(如果不知道列名)

# 提取第0列和第1列的数据
x_data = table_data[:, 0]
y_data = table_data[:, 1]

# 绘图代码同上
plt.figure(figsize=(10, 6))
plt.plot(x_data, y_data, 'b-', alpha=0.5)
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.show()
更便捷的进阶方法:用Astropy Table类

如果你想更方便地操作数据(比如筛选、统计),可以直接把FITS数据表转换成Astropy的Table对象:

from astropy.table import Table

# 直接读取数据表为Table对象,指定hdu索引
table = Table.read('3XMM_DR5.fits', hdu=1)

# 查看前5行数据,快速了解内容
print(table[:5])

# 提取列绘图
plt.plot(table['列名1'], table['列名2'], 'r.', markersize=2)
plt.show()

这个Table类支持类似Pandas DataFrame的操作,用起来会顺手很多~

内容的提问来源于stack exchange,提问作者Diana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:28:22