Как нарисовать отрезок линии на фигуре FITS, используя APLpy или python 2.7?

Я хочу нарисовать отрезок линии, соединяющий две точки на фигуре FITS.

(x, y) координаты этих точек: (200,250) и (300,400).

Я использую APLpy для этого.

Мой код:

import matplotlib.pyplot as plt
import aplpy
import numpy as np

fig = aplpy.FITSFigure('test.fits')
fig.show_grayscale()

a=np.ndarray(shape=(2,2))
a[0][0]=200
a[0][1]=250
a[1][0]=300
a[1][1]=400

fig.show_lines(a)

plt.show() 

Я использую функцию "fig.show_lines()" APLpy, описанную на следующей веб-странице: http://aplpy.readthedocs.org/en/latest/quick_reference.html

В качестве аргумента для show_lines () указано "использовать списки пустых массивов".

Но я получил следующее сообщение об ошибке:

Traceback (most recent call last):
File "draw.py", line 16, in <module>
fig.show_lines(a)
File "<string>", line 2, in show_lines
File "/home/swapnil/anaconda/lib/python2.7/site-packages/aplpy/decorators.py", line  25, in _auto_refresh
return f(*args, **kwargs)
File "/home/swapnil/anaconda/lib/python2.7/site-packages/aplpy/aplpy.py", line 1275, in show_lines
xp, yp = wcs_util.world2pix(self._wcs, line[0, :], line[1, :])
IndexError: too many indices

Любая помощь будет оценена.

Благодарю.

2 ответа

Вам нужно сделать что-то вроде этого:

iline = np.array([[x1, x2],[y1,y2]])
fig.show_lines([iline], color = 'r')

куда x1, x2, y1, y2 в правильных единицах (для меня это были градусы)

Я понимаю, что это должен быть список 2xN массивы numpy:

x = np.array([[200], [300]])
y = np.array([[250], [400]])

fig.show_lines([x, y])

НТН,

Немецкий.

Недавно я столкнулся с подобной проблемой, и ответы, похоже, не сработали. Вы пробовали строить линии, используя

    matplotlib.pyplot.plot ( usually called as plt.plot)?

Это помогло мне.

Я открыл объект фигуры, используя:

    fig = aplpy.FITSFigure('fitsfile.fits')

а потом просто сделал:

    plt.plot([x1, x2], [y1, y2], color = 'r')

и это сработало на отлично Мне даже не нужно было использовать RA и Dec, и я напрямую использовал координаты пикселей, полученные с помощью astropy's all_world2pix(). Я почти уверен, что у aplpy ​​есть аналог, но я никогда не пробовал.

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