Как изменить цвет круглой области с зеленого на красный в ds9 через python, используя pyds9
Я использую pyds9 для автоматической загрузки подходящих изображений (для астрономических целей).
Я могу настроить все остальные параметры, такие как масштаб, цвет и уровень масштабирования. Для каждого изображения я хочу нарисовать небольшой кружок в определенном месте, который выделяет эту область. По умолчанию этот цвет зеленый. Как мне изменить этот цвет?
Также есть ли способ изменить толщину этого круга? У меня проблемы с видимостью. Зеленый цвет не очень хорошо виден для всех комбинаций cmap и scale. Что-то вроде красного было бы лучше.
Я посмотрел на команды XPAset. Есть способ сделать это. Но я не могу понять, как это сделать в pyds9. Вот ссылка для всех команд XPAset: http://ds9.si.edu/ref/xpa.html
Команда 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 ответа
[По-видимому, мне не разрешено добавлять комментарии к предыдущему ответу, поэтому вот еще один ответ, который согласуется с вышеизложенным].
Мы изучили это, и в синтаксисе команды "регион", похоже, есть ошибка. Вместо этого вы должны использовать канонический синтаксис xpa, в котором вы передаете строку "регионов" в список параметров и фактическую строку региона в буфере данных. В оболочке unix это будет сделано следующим образом:
echo 'fk5; circle 23:23:22.176 +58:50:01.23 9.838" # color=red' | xpaset ds9 regions
Данные отправляются на стандартный вывод xpaset, а список параметров помещается в командную строку после цели.
В Python это делается следующим образом:
d.set('regions', 'fk5; circle 23:23:22.176 +58:50:01.23 9.838" # color=red')
Здесь первый аргумент - это список параметров ("регионов"), а второй аргумент - буфер данных для отправки в DS9, в данном случае содержащий строку региона.
Как вы видите выше, вы можете отправить регион с единицами измерения угловых секунд, используя двойные кавычки для указания угловых секунд. Вы можете посмотреть спецификацию регионов для получения дополнительной синтаксической информации:
https://www.cfa.harvard.edu/~john/funtools/regions.html
Наконец, и извините, но невозможно редактировать регион из оболочки или pyds9.
Эта команда pyds9 будет работать:
d.set("regions command {circle 512 512 20 # color=red}")
Обратите внимание, что я просто удалил одинарные кавычки из вашего синтаксиса команды xpaset. Правильный вывод кавычек немного сбивает с толку: в команде оболочки xpaset вам нужны одинарные кавычки для защиты открытой скобки "{", но это не требуется в python. Также обратите внимание, что все это в одной строке (что технически является частью paramlist регионов - см. Документацию xpa).
С Уважением,
Эрик
PS Может показаться более понятным, если учесть, что следующая команда xpa работает так же, как та, которую вы изначально использовали выше:
xpaset -p ds9 'regions command {circle 512 512 20 # color=red}'
Здесь использование одинарных кавычек вокруг всей строки защищает открытую скобку от оболочки unix, подчеркивая при этом характер списка параметров как единой строки.