SuperAPI AI 工具集

sunpy

数据与分析

查看项目

更新于 10-16 02:09

技能介绍

用途

SunPy 是社区开发、免费且开源的太阳物理学软件包,用于太阳物理数据分析。它构建在 Astropy 生态之上,并扩展了太阳物理学家所需的功能。

适用场景包括:

  • 从 VSO、JSOC 及其他存档搜索和下载太阳数据。
  • 可视化太阳图像(EUV、磁图、白光)。
  • 在不同太阳坐标框架之间转换坐标(例如 Stonyhurst 到 Helioprojective)。
  • 分析太阳时间序列数据(GOES X 射线通量、太阳黑子数)。
  • 校正太阳差动自转。
  • 叠加不同仪器的数据(例如 AIA 与 HMI)。
  • 在日面上进行边缘拟合与特征追踪。

主要能力与核心原则

Map 对象:二维空间数据的主要数据结构,将图像数组与元数据(FITS 头)和坐标参考系(WCS)结合,支持物理上准确的绘图与裁剪。

太阳坐标:太阳物理使用许多非笛卡尔框架。SunPy 处理将三维太阳位置投影到二维望远镜平面的数学运算,并考虑地球相对于太阳的位置。

Fido(Federated IDO):统一的数据搜索接口。定义所需条件(时间、仪器、波长),Fido 会自动跨不同提供方查找。

TimeSeries:用于处理光变曲线。

太阳物理算法:包括边缘拟合与日面数学(如 all_coordinates_is_on_disk)。

性能优化:支持降采样预览(resample)和并行下载(Fido.fetch 的 max_conn 参数)。

使用方式

安装:

pip install "sunpy[all]"

标准导入:

import sunpy.map
import sunpy.coordinates
from sunpy.net import Fido, attrs as a
import astropy.units as u
from astropy.coordinates import SkyCoord

基本模式 — 搜索、下载与绘图:

from sunpy.net import Fido, attrs as a
import sunpy.map

# 1. 搜索数据
result = Fido.search(a.Time("2011/06/07 06:30", "2011/06/07 06:35"),
                     a.Instrument.aia,
                     a.Wavelength(171*u.angstrom))

# 2. 下载(返回文件路径列表)
# downloaded_files = Fido.fetch(result)

# 3. 创建并绘图
# aiayamap = sunpy.map.Map(downloaded_files[0])
# aiayamap.peek()

太阳地图(sunpy.map)操作与可视化: 支持坐标感知绘图、绘制边缘、绘制网格、地图加减等。地图加减要求共享相同 WCS。

太阳坐标(sunpy.coordinates)框架转换: 支持 Helioprojective、Heliographic Stonyhurst 等框架,以及使用差动自转旋转坐标(solar_rotate_coordinate)。

数据搜索(sunpy.net.Fido)复杂查询: 支持组合查询,如同时搜索 GOES X 射线耀斑与 AIA 图像,使用逻辑运算符组合条件。

时间序列(sunpy.timeseries): 加载 GOES 数据、绘图、导出为 Pandas DataFrame 并进行滚动平均。

关键规则

推荐做法:

  • 使用 sunpy.map.Map,这是处理具有正确坐标元数据的太阳图像的唯一可靠方式。
  • 使用物理单位,波长、距离和时间始终使用 astropy.units。
  • 检查观测者信息,确保地图头具有有效的观测者元数据。
  • 规范化地图,比较图像时使用 map.plot(norm=...) 或 aiamap.exposure_time 考虑不同曝光时间。
  • 矢量化坐标转换,SkyCoord 数组比单点快得多。
  • 使用 Fido 下载,它可以处理重试、本地缓存和多个提供方。

避免做法:

  • 不要用原始 plt.imshow 绘图,这会忽略世界坐标系(WCS),应使用 ax = plt.subplot(projection=my_map)。
  • 不要忽略时间尺度,注意 UTC 与 TAI 的区别。
  • 不要硬编码波长,使用 a.Wavelength(193 * u.AA) 确保搜索单位感知。
  • 不要手动裁剪,不要切片 numpy 数组,应使用 my_map.submap(bottom_left, top_right) 以保留坐标元数据。

反模式(切勿):

  • 不要按像素索引手动裁剪,会丢失坐标。应使用 SkyCoord 和 submap。
  • 不要硬编码太阳半径或距离。应从地图或常量获取,如 my_map.dsun。

适用场景与工作流

多仪器叠加分析(AIA 与 HMI):将 HMI 重投影到 AIA 视角,叠加 HMI 等值线(磁场)于 AIA(热等离子体)图像上。

测量耀斑通量演化:从时间序列文件截取耀斑窗口,获取峰值时间和通量。

图像序列差动自转校正:将一系列地图旋转到参考时间(注意:基本旋转与太阳表面差动自转不同,后者需使用 differential_rotation 模块)。

性能优化:

  • 大 AIA 图像(4096x4096)绘图慢,可降采样(resample)。
  • Fido.fetch 可使用多连接加速下载(max_conn=5)。

常见陷阱与解决方案

“缺少观测者”错误:计算失败因为 SunPy 不知道卫星位置。可在 FITS 头缺失时手动设置观测者(使用 get_body_heliographic_stonyhurst)。

方向问题(北不在上):太阳望远镜会旋转。可使用 aia_map.rotate() 将太阳北与 Y 轴对齐。

搜索结果为空:提供方可能宕机,应始终检查结果长度,若为空则抛出错误。

限制与说明

本文档未提供 SunPy 的具体版本号、系统要求、收费模式(描述为免费开源)、支持的数据源完整列表、全部功能模块清单等。部分功能(如差动自转校正的具体实现细节)需参考官方文档。

参考文档:

  • 官方文档:https://docs.sunpy.org/
  • SunPy Gallery:https://docs.sunpy.org/en/stable/generated/gallery/index.html
  • 搜索模式:sunpy.map.Map、sunpy.net.Fido、sunpy.coordinates.frames、sunpy.timeseries

SunPy 是探索离我们最近的恒星动力学的权威工具包。通过整合物理单位和太阳专用坐标系,它支持稳健且可复现的日球层物理研究。