我在 RA/Dec 球坐标中有一些多边形,我正在尝试用 aplpy 和天体世界坐标系 (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
该图与球坐标系的一个极点重叠(偏角 = 90 度),所以我想知道这是否会导致问题/揭示错误,或者是因为我的 WCS 设置不正确。
我怎样才能让多边形显示出来?