Python 使用astropy wcs aplpy FITSFIGRE绘制RA/Dec多边形
我在RA/Dec球坐标中有一些多边形,我正试图用aplpy和astropy世界坐标系(WCS)对象绘制它们,但我的脚本崩溃了 我可以用这个独立脚本重现问题: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
#!/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度?