aplpy ​​show_polygons() с раскрашенными лицами

У меня есть несколько многоугольников, которые я хотел бы построить в пространстве прямого восхождения / склонения с помощью APLpy, причем многоугольники закрашены другим 1D списком, но я не могу получить show_polygons() работать.

Я попытался адаптировать ответ от APLpy, чтобы показать маркеры, нормализованные с помощью карты цветов, но когда я его запустил, show_polygons() не понимает kwargs cmap, norm, или же c так же 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() работать?

1 ответ

Решение

Во-первых, координаты многоугольника, которые вы пытаетесь построить, не совпадают с массивом пикселей, который вы рисуете - хотя я предполагаю, что это не проблема для реальной фигуры, которую вы изображаете. Так что вместо этого вы должны изменить свой код на что-то вроде этого:

# 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_polygons а также show_markers вести себя так же. На самом деле, их строки документов утверждают, что show_poligons передает его kwargs к PatchCollection класс, а show_markers послал бы их plt.scatter, Вот почему ошибки атрибутов продолжают происходить.

Итак, как же тогда покрасить пятна в 1d список цветов? Насколько я знаю, решения с одной линией не существует, но вы можете перебрать полигоны и покрасить их по отдельности:

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

Который производит следующую цифру для меня:

эти неуловимые полигоны

Другие вопросы по тегам