如何使用pyds9在ds9到python中将圆形区域的颜色从绿色变为红色

时间:2014-06-06 23:35:03

标签: python astronomy astropy ds9

我正在使用pyds9自动加载拟合图像(用于天文学相关目的)。

我可以配置所有其他设置,如缩放,颜色和缩放级别。 对于每个图像,我想要做的是在突出该区域的特定位置绘制一个小圆圈。默认情况下,此颜色为绿色。如何更改此颜色?

还有办法改变这个圆的厚度吗?我的可见性问题。对于所有cmap和比例组合,绿色不清晰可见。像红色的东西会更好。

我查看了XPAset命令。有办法做到这一点。但我无法弄清楚如何在pyds9中做到这一点。以下是所有XPAset命令的链接:http://ds9.si.edu/ref/xpa.html#regions

xpaset命令是:

*$xpaset -p ds9 regions command '{circle 100 100 20 # color=red}'*

如何将此xpaset命令转换为pyds9的d.set()方法?

我的意思是:d.set('regions','fk5; circle(100,100,20") # color=red')

以下是我正在使用的代码:

import ds9

# x is the RA and y is the DEC 
# for describing the location of astronomical objects
x = 200.1324
y = 20.3441

# the four FITS images to be loaded
image_list = ['img1.fits.gz','img2.fits.gz','img3.fits.gz','img4.fits.gz']

#initializing a ds9 window
d = ds9.ds9(target='DS9:*', start=True, verify=True)

for i in range(len(image_list)):
    d.set('frame ' + str(i+1))
    d.set('file ' + image_list[i])
    d.set('cmap bb')
    d.set('cmap invert')
    d.set('scale zscale')
    d.set('scale linear')
    d.set('regions','fk5; circle('+str(x)+','+str(y)+',20")')
    # This previous line draws a green circle with center at (x,y) 
    # and radius of 20 arc-sec. But the color is by default green. 
    # I want to change this to lets say red. How do I do it ???


# arranging the 4 images in tile format
d.set('tile') 
for i in range(len(image_list)):
    d.set('frame ' + str(i+1))
    d.set('zoom to fit')

d.set('saveimage png myimagename.png')

# time to remove all the images from the frames
# so that the some new set of images could be loaded
for i in range(len(image_list)):
    d.set('frame delete')

2 个答案:

答案 0 :(得分:2)

[显然,我不允许在上一个答案中添加评论,所以这是另一个与上述相关的答案]。

我们调查了这个,以及区域"命令"语法似乎有一个错误。相反,你应该使用规范的xpa语法,在其中传递字符串" regions"在参数列表和数据缓冲区中的实际区域字符串中。在unix shell中,这将按如下方式完成:

echo 'fk5; circle 23:23:22.176 +58:50:01.23 9.838" # color=red' | xpaset ds9 regions

数据被发送到xpaset的stdin,并且paramlist被放置在目标之后的命令行上。

在python中,这可以通过以下方式完成:

d.set('regions', 'fk5; circle 23:23:22.176 +58:50:01.23 9.838" # color=red')

这里,第一个参数是参数列表(" regions"),第二个参数是要发送到DS9的数据缓冲区,在这种情况下包含区域字符串。

如上所示,您可以使用双引号发送弧秒大小单位的区域来指定弧秒。您可以查看区域规范以获取更多语法信息:

https://www.cfa.harvard.edu/~john/funtools/regions.html

最后,抱歉,但是无法从shell或pyds9编辑区域。

答案 1 :(得分:1)

这个pyds9命令可以工作:

d.set("regions command {circle 512 512 20 # color=red}")

请注意,我只是从xpaset命令语法中删除了单引号。正确获取引号有点令人困惑:在xpaset shell命令中,您需要使用单引号来保护open" {"括号但在python中不需要这个。另请注意,它全部在一个字符串中(技术上是区域参数列表的一部分 - 请参阅xpa文档)。

此致

埃里克

P.S。考虑到以下xpa命令与上次使用的命令一样有效,可能会让事情变得更清楚:

xpaset -p ds9 'regions command {circle 512 512 20 # color=red}'

在这里,在整个字符串周围使用单引号可以保护unix shell中的open括号,同时将paramlist的性质强调为单个字符串。