0

我有一些多边形,我想用 APLpy 在赤经/赤纬空间中绘制,多边形由另一个 1D 列表着色,但我无法开始show_polygons()工作。

我试图从APLpy 显示由 colormap 标准化的标记中调整答案,但是当我运行它时,show_polygons()不理解 kwargs cmap,normc相同的方式show_markers()

我改编的独立脚本:

import aplpy, numpy
from numpy import array
import matplotlib.pyplot as plt
from matplotlib import cm, colors

polygons = [array([[ 46.33681474,  34.75536787],
   [ 45.04752709,  35.37650737],
   [ 44.63035494,  34.73768723],
   [ 46.33681474,  34.75536787]]), array([[ 46.45913142,  34.69050337],
   [ 45.04717721,  35.37189917],
   [ 44.6205633 ,  34.72362768],
   [ 46.45913142,  34.69050337]]), array([[ 46.52741447,  34.64997822],
   [ 45.04457814,  35.36619781],
   [ 44.60486296,  34.70107236],
   [ 46.52741447,  34.64997822]])]
zvalues = [  1.02018589e-10,   9.38471764e-12,   2.15806865e-11]

cmap1 = cm.YlOrBr
norm1 = colors.Normalize( numpy.min(zvalues), numpy.max(zvalues) )
fig   = aplpy.FITSFigure( numpy.zeros( (10,10) ) )
fig.show_polygons( polygons, cmap=cmap1, norm=norm1, c=zvalues, facecolor='none' )
plt.save( fname='plot.png' )

运行它会show_polygons()引发不同的 AttributeErrors:

AttributeError: Unknown property cmap
AttributeError: Unknown property norm
AttributeError: Unknown property c

我的版本:

$ python --version
Python 3.5.1 :: Continuum Analytics, Inc.
$ python
>>> import matplotlib
>>> print(matplotlib.__version__)
1.5.1
>>> import aplpy
>>> print(aplpy.__version__)
1.1.1

我怎么show_polygons()去上班?

4

1 回答 1

0

首先,您尝试绘制的多边形坐标与您正在绘制的像素数组不匹配 - 尽管我认为这对于您正在绘制的真实拟合图来说不是问题。因此,您应该将代码更改为以下内容:

# fixed so that the polygons fall inside the image
fig = aplpy.FITSFigure(numpy.zeros((50,50)))
# zoom in on the coord values of the polygons
fig.recenter(45.5, 35, 1.5)

现在,实际回答这个问题:aplpy.FITSFigure将关键字参数传递给不同matplotib例程的不同方法 - 所以你不应该期望show_polygonsshow_markers以相同的方式表现。事实上,他们的文档字符串状态show_poligons将其传递kwargs给一个PatchCollection类,同时show_markers将它们发送到plt.scatter. 这就是属性错误不断发生的原因。

那么,如何通过一维颜色列表对补丁进行着色呢?据我所知,没有单一的解决方案,但您可以遍历多边形并单独着色:

for p, c in zip(polygons, zvalues):
        fig.show_polygons([p], facecolor=cmap1(norm1(c)),
                          edgecolor='none', alpha=0.3)
plt.show()

这为我生成了下图:

那些难以捉摸的多边形

于 2017-02-15T12:42:02.893 回答