2017-01-24 6 views
0

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

Я пытался адаптировать ответ от APLpy show markers normalized by a colormap, но когда я запускаю его, 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() работать?

ответ

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

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

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

порождающих следующей фигурой для меня:

those elusive polygons

+0

Спасибо за ответ, который, кажется, частично работает. Похоже, что все координаты находятся в декартовой системе пикселя (из-за numpy.zeros())? Мне это нужно, где координаты углов многоугольника являются сферическими (RA, Dec) координатами, а не декартовыми (x, y). –

+0

Вам необходимо передать действительный HDU или путь к файлу подгонки к файлу aplpy.FITSFigure, чтобы он отображался в координатах неба. Это не то, что показывает ваше оригинальное сообщение, поскольку вы даете ему только массив пикселей. –

+0

Я использовал 'zeros()' из-за другого примера, который я нашел, не зная всех его последствий. У меня нет подходящего файла для начала. Я думаю, что 'FITSFigure' может принять объект' astropy.wcs.WCS() 'вместо' zeros() ', но я не могу понять, как получить одну настройку для J2000 RA/Dec. Возможно, это тема для нового вопроса stackoverflow. –

Смежные вопросы