FITS文件的坐标转换问题

2024-04-09

我已经在 python 中加载并绘制了一个 FITS 文件。 在上一篇文章的帮助下,我成功地将轴从像素转换为天体坐标。但我无法正确地以毫角秒(mas)为单位获取它们。 代码如下

import numpy as np
import matplotlib.pyplot as plt
import astropy.units as u
from astropy.wcs import WCS
from astropy.io import fits
from astropy.utils.data import get_pkg_data_filename

filename = get_pkg_data_filename('hallo.fits')


hdu = fits.open(filename)[0]
wcs = WCS(hdu.header).celestial
wcs.wcs.crval = [0,0]

plt.subplot(projection=wcs) 
plt.imshow(hdu.data[0][0], origin='lower') 
plt.xlim(200,800)
plt.ylim(200,800)
plt.xlabel('Relative R.A ()')
plt.ylabel('Relative Dec ()')
plt.colorbar()

The output looks like enter image description here

y 标签由于某种原因被剪掉了,我不知道。

正如另一篇文章所示,人们可以使用

wcs.wcs.ctype = [ 'XOFFSET' , 'YOFFSET' ]

将其切换为毫弧秒,我得到

但比例不正确! 例如,0deg00min00.02sec 应该是 20 mas 而不是 0.000002! 我在这里错过了什么吗?


看起来像光谱索引图。好的! 我认为问题可能是 FITS 隐式使用 CDELT 等值的度数。并且为了绘图,它们应该明确地转换为 mas 。 最直接的方法是将 CDELT 值乘以 3.6e6,将度数转换为毫数。 但是,如果您想在某个时候转换为不同的单位,有一种更通用的方法可能会很有用:

import astropy.units as u
w.wcs.cdelt = (w.wcs.cdelt * u.deg).to(u.mas)

所以它基本上首先说 CDELT 的单位是度,然后将它们转换为 mas。

整个工作流程是这样的:

def make_transform(f):
    '''use already read-in FITS file object f to build pixel-to-mas transformation'''
    print("Making a transformation out of a FITS header")

    w = WCS(f[0].header)
    w = w.celestial
    
    w.wcs.crval = [0, 0]
    w.wcs.ctype = [ 'XOFFSET' , 'YOFFSET' ]
    w.wcs.cunit = ['mas' , 'mas']
    w.wcs.cdelt = (w.wcs.cdelt * u.deg).to(u.mas)
    print(w.world_axis_units)
    return w

def read_fits(file):
    '''read fits file into object'''
    try:
        res =  fits.open(file)
        return res
    except:
        return None

def start_plot(i,df=None, w=None, xlim = [None, None], ylim=[None, None]):
    '''starts a plot and returns fig,ax .
    xlim, ylim - axes limits in mas
    '''
       
    # make a transformation
    # Using a dataframe
    if df is not None:
        w = make_transform_df(df)         
    # using a header    
    if w is not None:
        pass
    # not making but using one from the arg list
    else:
        w = make_transform(i)

#    print('In start_plot using the following transformation:\n {}'.format(w))


    fig = plt.figure()
    
    if w.naxis == 4:
        ax = plt.subplot(projection = w, slices = ('x', 'y', 0 ,0 ))
    elif w.naxis == 2:
        ax = plt.subplot(projection = w)
        
    
    # convert xlim, ylim to coordinates of BLC and TRC, perform transformation, then return back to xlim, ylim in pixels
    if any(xlim) and any(ylim):
        xlim_pix, ylim_pix = limits_mas2pix(xlim, ylim, w)
        ax.set_xlim(xlim_pix)
        ax.set_ylim(ylim_pix)
        
    
    fig.add_axes(ax)  # note that the axes have to be explicitly added to the figure
    return fig, ax 


rm = read_fits(file)
wr = make_transform(rm)
fig, ax = start_plot(RM, w=wr, xlim = xlim, ylim = ylim)

然后只需用 imshow 或轮廓或其他东西绘制到轴 ax 。 当然,可以减少这段代码以满足您的特定需求。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FITS文件的坐标转换问题 的相关文章

  • 父子进程之间的通信

    我正在尝试创建一个具有一个或多个子进程的 Python 3 程序 父进程生成子进程 然后继续处理自己的业务 有时我想向特定的子进程发送一条消息 由其捕获该消息并采取行动 此外 子进程在等待消息时需要处于非锁定状态 它将运行自己的循环来维护服
  • Python zmq SUB 套接字未接收 MQL5 Zmq PUB 套接字

    我正在尝试在 MQL5 中设置一个 PUB 套接字 并在 Python 中设置一个 SUB 套接字来接收消息 我在 MQL5 中有这个 include
  • Jupyter Notebook 找不到 Python 模块

    不知道发生了什么 但每当我使用 ipython 氢 原子 或 jupyter 笔记本时都找不到任何已安装的模块 我知道我安装了 pandas 但笔记本说找不到 我应该补充一点 当我正常运行脚本时 python script py 它确实导入
  • 为什么 Pickle 协议 4 中的 Pickle 文件是协议 3 中的两倍,而速度却没有任何提升?

    我正在测试 Python 3 4 我注意到 pickle 模块有一个新协议 因此 我对 2 个协议进行了基准测试 def test1 pickle3 open pickle3 wb for i in range 1000000 pickle
  • Python排序算法[重复]

    这个问题在这里已经有答案了 我在Python中实现了不同的排序算法 以更好地理解它们 我想知道Python的内置排序方法实现什么类型的排序 这是一个叫做Timsort http en wikipedia org wiki Timsort由
  • Python:返回 // 正则表达式之间的字符串[重复]

    这个问题在这里已经有答案了 我仍然不明白正则表达式 我阅读了文档 但是在我想出了正则表达式字符之后 那么如何使用它们呢 例如 我只想返回前两个斜杠之间的任何内容 en lemon peel n ca llimona n is 的输出应该是
  • pygame.error:文件不是 Windows BMP 文件(问题的延续)

    我最近开始使用 Mac 进行编码 因此 我必须从以前的计算机 Windows 中移走所有文件 长话短说 在发生此错误之前一切都很好 pygame error File is not a Windows BMP file 我检查了 Stack
  • 导入 pandas 显示 ImportError: 无法导入名称哈希表

    我已经在 python 3 3 上安装了 pandas 代码如下 import csv import pandas from pandas import DataFrame csvdata pandas read csv datafile
  • 类型错误:描述符“__weakref__”不适用于父级 __str__ 方法中的对象

    我有一个父类 我们称之为A还有一堆儿童班 B C D等等 我想定义一个 str 父类及其内部的方法我想通过访问子类的成员dir self 它有效 但是当我检查该名称是否可调用时callable getattr self attr I get
  • 如何使用 Plotly 中的直方图将所有离群值分入一个分箱?

    所以问题是 我可以在 Plotly 中绘制直方图 其中所有大于某个阈值的值都将被分组到一个箱中吗 所需的输出 但使用标准情节Histogram类我只能得到这个输出 import pandas as pd from plotly import
  • gitlab-ci 的缓存虚拟环境

    我使用 Gitlab CI 脚本缓存了 Pip 包 所以这不是问题 现在我还想赶上Conda虚拟环境 因为它减少了设置环境的时间 我缓存了一个虚拟环境 不幸的是 最后需要很长时间才能缓存所有 venv 文件 我尝试仅缓存 CI PROJEC
  • 如何动态更新 ttk.combobox?

    我正在 Windows 8 计算机上使用 Python 3 4 和 Tkinter 创建 GUI GUI 顶部有一些条目输入 然后是一些组合框 我希望组合框从先前输入描述的文本文件中获取选项列表 文件名 找到必要信息的行 分隔符类型等 我正
  • Sublime Text 插件开发中的全局 Python 包

    一 总结 我不知道 Sublime Text 插件开发人员如何使用 Sublime Text 查找全局 Python 包 而不是 Sublime Text 目录的 Python 包 Sublime Text使用自己的Python环境 而不是
  • 如何在Python中同时运行两只乌龟?

    我试图让两只乌龟一起移动 而不是一只接着另一只移动 例如 a turtle Turtle b turtle Turtle a forward 100 b forward 100 但这只能让他们一前一后地移动 有没有办法让它们同时移动 有没有
  • 使用 Python37 运行时通过 Cloud Functions 生成缩略图

    我有一个由 Firebase 存储触发的 Google Cloud 函数 我想生成缩略图 虽然 Node js 文档有一个使用 ImageMagick 的示例 https cloud google com functions docs tu
  • Python 3 print() 到变量

    在Python 3中 您可以使用 print 函数将数据写入文件 例如print my data file my open file 这很好 而且非常酷 但你可以吗print到 字符串 变量 如果是这样 怎么办 在我的特定用例中 我试图避免
  • 拖动数据获取信号发射两次 python gtk3

    我希望源也是目的地 我实现了下面的信号 但拖动数据获取信号触发了两次 第二次 数据变量 在 on drag data get 中 被自动选择的 ListStore 项填充 class DragSource Gtk TreeView def
  • lxml/python 使用 CDATA 部分读取 xml

    在我的 xml 中我有一个CDATA部分 我想保留 CDATA 部分 然后剥离它 有人可以帮忙解决以下问题吗 默认不起作用 from io import StringIO from lxml import etree xml
  • 如何使用Python3.4在tornado中进行异步mysql操作?

    我现在使用Python3 4 我想在Tornado中使用异步mysql客户端 我已经发现torndb https github com bdarnell torndb但在阅读其源代码后 我认为它无法进行异步mysql操作 因为它只是封装了M
  • Django 多个外键,相同的相关名称

    我想创建一个模型 1 其中具有相同其他模型 2 的多个外键 我希望这些外键具有相同的related name因为每个外键将指向 model 2 的不同实例 因为我需要所有外键的一个反向关系 也许一个例子会更明确 class Parent M

随机推荐

  • 如何在没有副本的情况下向后流式传输集合?

    我想知道如何向后流式传输集合无副本在法罗 吱吱声中 例如 要流式传输 1 2 3 so stream next回报3 then 2 then 1 我知道我可以使用collection reversed readStream but reve
  • oracle 9i 中还有其他 wm_concat 命令吗?

    我有一个包含部门 ID 员工姓名和加入日期的表 我想要获取在给定日期加入给定部门的所有员工的列表 wm concat不管用 根据this http www oracle base com articles misc string aggre
  • 如何使用个人访问令牌从 CircleCI 构建将提交推送到 Github

    执行 git 存储库构建时giantswarm docs content在 CircleCI 中 我想将提交推送到另一个存储库giantswarm docs 我有这个在deployment的部分circle yml git config c
  • 如何让 jenkins-cli.jar 使用我的 ssh 代理/钥匙串?

    我正在使用 jenkins 服务器中的 jenkins cli jar 文件 每次运行时它都会提示我输入 ssh 密钥密码 我希望它使用我的 ssh 钥匙串 这样我就不必在每次调用时输入它 如果重要的话 我在 OSX 上使用默认的钥匙串设置
  • 不再有离线语音识别了吗?

    今天我注意到离线语音识别不再起作用了 它之前有效 因为我能够将它用于我的应用程序 并且我完全确定我处于离线状态 并且当时一切正常 我今天想测试我的应用程序 但无论我说得多大声 它都无法理解我所说的内容 然后我打开了无线网络 它工作得很好 我
  • 在 Windows 窗体上显示 HTML 内容的最佳方式是什么?

    我想在我的应用程序中显示 HTML 格式的内容 最好是在 Web 浏览器控件内 我可以先创建一个 HTML 文档 然后将其加载到 Web 浏览器控件中 但这太笨拙了 有什么方法可以将包含 HTML 代码的字符串直接加载到 Web 浏览器中吗
  • 带有图像背景的 SVG 三角形分隔符

    好吧 我正在尝试创建一个 SVG 部分分隔符 它的工作原理是这样的 section section
  • Clojure 调用一系列函数并存储它们的返回值

    我正在构建一个数据模式 并且在我的脚下有以下内容clj定义和处理模式和初始数据的文件 每次调用下面调用的函数d transact defn recreate database To recreate db after running del
  • 我可以拥有多个 Spring Cloud 配置服务器吗?

    我知道我可以使用 1 个以上的存储库来跨多个存储库 可能针对每个应用程序 分发我的配置 但是 我可以为这些存储库运行 1 个以上的配置服务器吗 这样我们就可以避免 配置服务器 出现单点故障 如果我们可以运行多个配置服务器 我如何从访问任何一
  • 如何在Golang中创建kafka消费者组?

    可用的库是sarama https github com Shopify sarama 或其扩展萨拉玛簇 https github com bsm sarama cluster 但是没有提供消费者组示例 不在sarama https god
  • 提交具有自定义功能的加载项

    In this doc https learn microsoft com en us office dev add ins excel custom functions overview 其中提到 开发者预览版尚不支持以下功能 将加载项发
  • virtualenv 激活不起作用

    我正在尝试创建一个虚拟环境来测试 api 我可以使用以下方式创建环境virtualenv test 然后我可以 cd 进入它 当我尝试跑步时activate 我收到此错误 PS C Users Bright Bridge Desktop a
  • Log4j TimeBased 触发策略中 modulate = 'true' 表示什么

    在下面的示例中 每天都会创建一个日志文件 考虑到这个例子 您能否提供一个场景来展示 modulate true 的用法 并将间隔设置为 1
  • VC/C++ 裸属性有什么作用?

    来自msdn http msdn microsoft com en us library h5w10wxs aspx 对于用裸函数声明的函数 属性 编译器生成代码 没有序言和结尾代码 你 可以使用这个功能来编写自己的 prolog epil
  • Scrapy 是否可以从原始 HTML 数据中获取纯文本?

    例如 scrapy shell http scrapy org content hxs select id content extract 0 print content 然后 我得到以下原始 HTML 代码 div h2 Welcome
  • GrantPermissionCallable:权限:无法授予 android.permission.SET_TIME

    我正在尝试使用新的授予权限规则 https developer android com reference android support test rule GrantPermissionRule html这是最新支持库的一部分 在我的清
  • 在单个 matplotlib 图上嵌入多个 gridspec 布局?

    我正在使用 python 图形库 matplotlib 来绘制报告中的几项内容 我发现自己需要在较小图形的任意网格上方有几个固定计数的图形 我四处搜索 但找不到任何可以让我在单个 matplotlib 图上使用两个 gridspec 布局的
  • 我可以使用购买状态 API 来验证应用程序是否是通过 Play 商店购买的

    我有一个与我的后端通信的应用程序 我希望后端仅在用户通过游戏商店购买该应用程序并且没有窃取它时接受并响应 所以想法是 用户通过 Playstore 购买应用程序 应用程序通过服务器进行通信并发送使用该应用程序的用户的gmail地址 服务器询
  • Django 基于类的 DeleteView 示例

    有谁知道或有人可以制作一个 Django 基于类的通用 DeleteView 的简单示例吗 我想子类化 DeleteView 并确保当前登录的用户在删除该对象之前拥有该对象的所有权 任何帮助将非常感激 先感谢您 这是一个简单的 from d
  • FITS文件的坐标转换问题

    我已经在 python 中加载并绘制了一个 FITS 文件 在上一篇文章的帮助下 我成功地将轴从像素转换为天体坐标 但我无法正确地以毫角秒 mas 为单位获取它们 代码如下 import numpy as np import matplot