如何使用APLpy或python 2.7在FITS图上绘制线段?

时间:2014-10-31 08:58:23

标签: python-2.7 aplpy

我想在FITS图上绘制一个连接两个点的线段。

(x,y)这些点的坐标是(200,250)& (300400)。

我正在使用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#shapes

它说'使用numpy数组列表'作为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

任何帮助将不胜感激。

感谢。

3 个答案:

答案 0 :(得分:0)

我知道它应该是2xN numpy数组的列表:

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

fig.show_lines([x, y])

HTH,

德语。

答案 1 :(得分:0)

你需要做这样的事情:

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

x1x2y1y2的位置正确(对我来说这是度数)

答案 2 :(得分:0)

我最近遇到了类似的问题,答案似乎没有用。您是否尝试使用

绘制线条
    matplotlib.pyplot.plot ( usually called as plt.plot)?

那对我有用。

我使用以下方法打开了一个图形对象:

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

然后简单地做:

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

,效果很好。我什至不必使用RA和Dec,而直接使用通过使用astropy的all_world2pix()获得的像素坐标。我很确定aplpy可以做到这一点,但我从未尝试过。

相关问题