Tea*_*hey 5 python matplotlib-basemap fits pyfits astropy
我看了看并找到了解决这个问题的方法,但我什么都没有.
我正在通过matplotlib生成矩形FITS图像,然后使用AstroPy(或PyFITS)将WCS坐标应用于它们.我的图片中银河系的经度和纬度,所以标题关键字适合我的地图应该是GLON-CAR和GLAT-CAR(笛卡尔投影).我已经看过在SAO DS9中使用相同地图投影的其他地图,并且坐标工作得很好...... 网格应该是完全正交的.可在此处找到FITS标准预测.
但是当我生成我的地图时,坐标根本不是笛卡儿.这是我的地图(左)和大致相同区域(右)的另一个参考地图的并排比较.两者都列出GLON-CAR,并GLAT-CAR在FITS头,但是当在SAO DS9看着我的是扭曲(注意坐标网格是什么SAO DS9基于在FITS头,或至少某处存储在FITS文件中的数据):

这是有问题的,因为如果投影错误,坐标分配算法将为每个像素分配不正确的坐标.
有没有人遇到这个,或者知道可能是什么问题?
我已经尝试过应用其他投影(只是为了看看它们在SAO DS9中的表现如何)并且它们很好......但我的笛卡尔和墨卡托投影并没有像他们应该的那样提出正交网格.
我不敢相信这会是AstroPy中的一个错误,但是我找不到任何其他原因...除非我在标题中的参数格式不正确,但我仍然看不出那会怎样导致问题我'经历.或者你会推荐使用其他东西吗?(我已经看过matplotlib底图但是在我的计算机上工作时遇到了一些麻烦).
我的标题代码如下:
from __future__ import division
import numpy as np
from astropy.io import fits as pyfits # or use 'import pyfits, same thing'
#(lots of code in between: defining variables and simple calculations...
#probably not relevant)
header['BSCALE'] = (1.00000, 'REAL = TAPE*BSCALE + BZERO')
header['BZERO'] = (0.0)
header['BUNIT'] = ('mag ', 'UNIT OF INTENSITY')
header['BLANK'] = (-100.00, 'BLANK VALUE')
header['CRVAL1'] = (glon_center, 'REF VALUE POINT DEGR') #FIRST COORDINATE OF THE CENTER
header['CRPIX1'] = (center_x+0.5, 'REF POINT PIXEL LOCATION') ## REFERENCE X PIXEL
header['CTYPE1'] = ('GLON-CAR', 'COORD TYPE : VALUE IS DEGR')
header['CDELT1'] = (-glon_length/x_length, 'COORD VALUE INCREMENT WITH COUNT DGR') ### degrees per pixel
header['CROTA1'] = (0, 'CCW ROTATION in DGR')
header['CRVAL2'] = (glat_center, 'REF VALUE POINT DEGR') #Y COORDINATE OF THE CENTER
header['CRPIX2'] = (center_y+0.5, 'REF POINT PIXEL LOCATION') #Y REFERENCE PIXEL
header['CTYPE2'] = ('GLAT-CAR', 'COORD TYPE: VALUE IS DEGR') # WAS CAR OR TAN
header['CDELT2'] = (glat_length/y_length, 'COORD VALUE INCREMENT WITH COUNT DGR') #degrees per pixel
header['CROTA2'] = (rotation, 'CCW ROTATION IN DEGR') #NEGATIVE ROTATES CCW around origin (bottom left).
header['DATAMIN'] = (data_min, 'Minimum data value in the file')
header['DATAMAX'] = (data_max, 'Maximum data value in the file')
header['TELESCOP'] = ("Produced from 2MASS")
pyfits.update(filename, map_data, header)
Run Code Online (Sandbox Code Playgroud)
感谢您的任何帮助,您可以提供.
在-CAR投影的现代定义中(来自Calabretta等人),如果设置为零,则GLON-CAR/ GLAT-CAR投影仅产生直线网格CRVAL2.如果CRVAL2不为零,那么网格是弯曲的(这应该与Astropy无关).您可以通过调整来尝试修复此问题CRVAL2,CRPIX2因此它CRVAL2为零.这有帮助吗?
只是为了澄清我的意思,在上面的代码之后,在写出文件之前尝试:
header['CRPIX2'] -= header['CRVAL2'] / header['CDELT2']
header['CRVAL2'] = 0.
Run Code Online (Sandbox Code Playgroud)
运气好的话?
如果你看一下你所看到的'参考'文件的标题,你会发现那里CRVAL2是零.只要是明确的,没有什么是错用CRVAL2为非零,但网格就不再是直线的.