我正在使用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')
答案 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的性质强调为单个字符串。