Python 使用astropy wcs aplpy FITSFIGRE绘制RA/Dec多边形

Python 使用astropy wcs aplpy FITSFIGRE绘制RA/Dec多边形,python,matplotlib,astropy,aplpy,spherical-coordinate,Python,Matplotlib,Astropy,Aplpy,Spherical Coordinate,我在RA/Dec球坐标中有一些多边形,我正试图用aplpy和astropy世界坐标系(WCS)对象绘制它们,但我的脚本崩溃了 我可以用这个独立脚本重现问题: #!/usr/bin/env python import astropy import aplpy, numpy from numpy import array import matplotlib.pyplot as plt from matplotlib import cm, colors from astropy.wcs import

我在RA/Dec球坐标中有一些多边形,我正试图用aplpy和astropy世界坐标系(WCS)对象绘制它们,但我的脚本崩溃了

我可以用这个独立脚本重现问题:

#!/usr/bin/env python
import astropy
import aplpy, numpy
from numpy import array
import matplotlib.pyplot as plt
from matplotlib import cm, colors
from astropy.wcs import WCS

cent_ra  =   1 # plot center, ra,  deg
cent_dec =  88 # plot center, dec, deg
rad      =   7 # plot radius, deg
rad_pix  = 300 # plot radius, pixels

# two polygons to plot, in ra-dec space
polygons_radec = [ array([[ 1.0, 88.0],[ 2.0, 88.0],[ 2.0, 89.0],[ 1.0, 88.0]]),
                   array([[ 1.0, 88.0],[ 2.0, 88.0],[ 2.0, 87.0],[ 1.0, 88.0]]) ]
zvalues = [5,2]

# setup our radec-pixel coordinate transformation
w = WCS( naxis=2 )
w.naxis1 = 2 * rad_pix
w.naxis2 = 2 * rad_pix
w.wcs.crpix = [rad_pix, rad_pix]  # reference pixel
w.wcs.crval = [ cent_ra, cent_dec ]  # reference pixel's ra/dec coordinate?
w.wcs.cdelt = array([ rad/rad_pix, rad/rad_pix ]) # pixel delta in ra/dec space?
w.wcs.ctype = ['RA--TAN','DEC-TAN']

# convert the ra-dec polygon coordinates to pixel coordinates
polygons = []
for p in polygons_radec :
  polygon = []
  for c in p :
    polygon += [ w.wcs_world2pix( c[0], c[1], 1 ) ]
  polygons += [ array( polygon ) ]
print('polygons:')
print(polygons)
print()

# plot our polygons with colors
cmap1 = cm.YlOrBr
norm1 = colors.Normalize( numpy.min(zvalues), numpy.max(zvalues) )
fig   = aplpy.FITSFigure( w )
for p, c in zip( polygons, zvalues ) :
  fig.show_polygons( [p], facecolor=cmap1(norm1(c)), edgecolor='none', alpha=0.3 )

plt.savefig( 'plot.png' , dpi=300 )
当我尝试运行此程序时,我得到一个相当大的回溯/异常:

Traceback (most recent call last):
  File "./test.py", line 46, in <module>
    plt.savefig( 'plot.png' , dpi=300 )
  File "/.../miniconda3/lib/python3.5/site-packages/matplotlib/pyplot.py", line 696, in savefig
    res = fig.savefig(*args, **kwargs)
  File "/.../miniconda3/lib/python3.5/site-packages/matplotlib/figure.py", line 1563, in savefig
    self.canvas.print_figure(*args, **kwargs)
  File "/.../miniconda3/lib/python3.5/site-packages/matplotlib/backends/backend_qt5agg.py", line 203, in print_figure
    FigureCanvasAgg.print_figure(self, *args, **kwargs)
  File "/.../miniconda3/lib/python3.5/site-packages/matplotlib/backend_bases.py", line 2232, in print_figure
    **kwargs)
  File "/.../miniconda3/lib/python3.5/site-packages/matplotlib/backends/backend_agg.py", line 527, in print_png
    FigureCanvasAgg.draw(self)
  File "/.../miniconda3/lib/python3.5/site-packages/matplotlib/backends/backend_agg.py", line 474, in draw
    self.figure.draw(self.renderer)
  File "/.../miniconda3/lib/python3.5/site-packages/matplotlib/artist.py", line 62, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/.../miniconda3/lib/python3.5/site-packages/matplotlib/figure.py", line 1159, in draw
    func(*args)
  File "/.../miniconda3/lib/python3.5/site-packages/mpl_toolkits/axes_grid1/parasite_axes.py", line 295, in draw
    self._get_base_axes_attr("draw")(self, renderer)
  File "/.../miniconda3/lib/python3.5/site-packages/mpl_toolkits/axisartist/axislines.py", line 772, in draw
    super(Axes, self).draw(renderer, inframe)
  File "/.../miniconda3/lib/python3.5/site-packages/matplotlib/artist.py", line 62, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/.../miniconda3/lib/python3.5/site-packages/matplotlib/axes/_base.py", line 2319, in draw
    a.draw(renderer)
  File "/.../miniconda3/lib/python3.5/site-packages/matplotlib/artist.py", line 62, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/.../miniconda3/lib/python3.5/site-packages/matplotlib/axis.py", line 1108, in draw
    ticks_to_draw = self._update_ticks(renderer)
  File "/.../miniconda3/lib/python3.5/site-packages/matplotlib/axis.py", line 951, in _update_ticks
    tick_tups = [t for t in self.iter_ticks()]
  File "/.../miniconda3/lib/python3.5/site-packages/matplotlib/axis.py", line 951, in <listcomp>
    tick_tups = [t for t in self.iter_ticks()]
  File "/.../miniconda3/lib/python3.5/site-packages/matplotlib/axis.py", line 898, in iter_ticks
    for i, val in enumerate(majorLocs)]
  File "/.../miniconda3/lib/python3.5/site-packages/matplotlib/axis.py", line 898, in <listcomp>
    for i, val in enumerate(majorLocs)]
  File "/.../miniconda3/lib/python3.5/site-packages/aplpy/labels.py", line 421, in __call__
    label = self.axis.apl_tick_spacing * self.axis.apl_tick_positions_world[ipos]
  File "/.../miniconda3/lib/python3.5/site-packages/aplpy/angle_util.py", line 242, in __mul__
    s = Angle(sexagesimal=(d, m, s), latitude=self.latitude)
  File "/.../miniconda3/lib/python3.5/site-packages/aplpy/angle_util.py", line 52, in __init__
    self._simplify()
  File "/.../miniconda3/lib/python3.5/site-packages/aplpy/angle_util.py", line 88, in _simplify
    degrees")
Exception: latitude should be between -90 and 90
回溯(最近一次呼叫最后一次):
文件“/test.py”,第46行,在
plt.savefig('plot.png',dpi=300)
savefig中的文件“/…/miniconda3/lib/python3.5/site packages/matplotlib/pyplot.py”,第696行
res=图savefig(*args,**kwargs)
文件“/…/miniconda3/lib/python3.5/site packages/matplotlib/figure.py”,第1563行,保存图
self.canvas.print_图(*args,**kwargs)
文件“/…/miniconda3/lib/python3.5/site packages/matplotlib/backends/backend_qt5agg.py”,第203行,如图所示
图canvasagg.打印图(self,*args,**kwargs)
文件“/…/miniconda3/lib/python3.5/site packages/matplotlib/backend\u base.py”,第2232行,如图所示
**kwargs)
文件“/…/miniconda3/lib/python3.5/site packages/matplotlib/backends/backend_agg.py”,第527行,打印为png
图CAVASAGG.draw(自绘制)
文件“/…/miniconda3/lib/python3.5/site packages/matplotlib/backends/backend_agg.py”,绘图中第474行
self.figure.draw(self.renderer)
文件“/…/miniconda3/lib/python3.5/site packages/matplotlib/artist.py”,第62行,在draw_包装中
绘制(艺术家、渲染器、*args、**kwargs)
文件“/…/miniconda3/lib/python3.5/site packages/matplotlib/figure.py”,第1159行,在绘图中
func(*args)
文件“/…/miniconda3/lib/python3.5/site packages/mpl_工具箱/axes_grid1/寄生虫_axes.py”,第295行,在图纸中
self.\u get\u base\u axes\u attr(“绘制”)(self,渲染器)
文件“/…/miniconda3/lib/python3.5/site packages/mpl_toolkits/axisartist/axislines.py”,第772行,在绘图中
超级(轴,自)。绘制(渲染器,inframe)
文件“/…/miniconda3/lib/python3.5/site packages/matplotlib/artist.py”,第62行,在draw_包装中
绘制(艺术家、渲染器、*args、**kwargs)
文件“/…/miniconda3/lib/python3.5/site packages/matplotlib/axes/_base.py”,绘图中第2319行
a、 绘制(渲染器)
文件“/…/miniconda3/lib/python3.5/site packages/matplotlib/artist.py”,第62行,在draw_包装中
绘制(艺术家、渲染器、*args、**kwargs)
文件“/…/miniconda3/lib/python3.5/site packages/matplotlib/axis.py”,第1108行,在绘图中
勾号\u到\u绘制=自。\u更新\u勾号(渲染器)
文件“/…/miniconda3/lib/python3.5/site packages/matplotlib/axis.py”,第951行,在更新标记中
tick_tups=[t代表self.iter_ticks()中的t]
文件“/…/miniconda3/lib/python3.5/site packages/matplotlib/axis.py”,第951行,在
tick_tups=[t代表self.iter_ticks()中的t]
文件“/…/miniconda3/lib/python3.5/site packages/matplotlib/axis.py”,第898行,在iter_中
对于i,枚举中的val(主要)
文件“/…/miniconda3/lib/python3.5/site packages/matplotlib/axis.py”,第898行,在
对于i,枚举中的val(主要)
文件“/…/miniconda3/lib/python3.5/site packages/aplpy/labels.py”,第421行,在调用中__
label=self.axis.apl\u tick\u间距*self.axis.apl\u tick\u位置\u世界[IPO]
文件“/…/miniconda3/lib/python3.5/site packages/aplpy/angle\u util.py”,第242行,in\u\u mul__
s=角度(六分之一=(d,m,s),纬度=自身纬度)
文件“/…/miniconda3/lib/python3.5/site-packages/aplpy/angle\u-util.py”,第52行,在__
self._simplify()
文件“/…/miniconda3/lib/python3.5/site packages/aplpy/angle_util.py”,第88行,在
学位“)
例外情况:纬度应在-90和90之间
该图与球坐标系的一个极点重叠(赤纬=90度),因此我想知道这是否导致了问题/暴露了错误,或者是因为我的WCS设置不正确


如何显示多边形?

绘图的赤纬中心为88度,半径为7度。也许可以将圆心移动到83度?