Чтение координат прямого восхождения / склонения в gnuplot - PullRequest
4 голосов
/ 02 апреля 2020

У меня есть файл из двух столбцов с правильными координатами восхождения / склонения:

18:42:21.8 -23:04:52
20:55:00.8 -17:23:19

Я могу прочитать первый столбец, указав данные как 'timefmt', но, похоже, нет способа сделать подобное чтение для angular данные. Я мог бы, конечно, удалить: s и plot ($ 2 + $ 3/60 + $ 3/3600), но мне интересно, есть ли более элегантный способ.

1 Ответ

2 голосов
/ 02 апреля 2020

Вы можете определить функцию, которая выполняет эту работу за вас, что может быть немного удобнее и короче в команде plot.

  • Преобразование часов, минут, секунд или градусов, минут секунды в секундах через strptime() или timecolumn(). В консоли типа gnuplot проверьте help strptime, help timecolumn и help time_specifiers. Используйте %tH:%tM:%tS, а не %H:%M:%S.

Однако , вы должны быть осторожны, как gnuplot интерпретирует отрицательные времена :

если ваше время ввода, например, -00:17:56.7, gnuplot интерпретирует это как +00:17:56.7, что не соответствует вашим ожиданиям. По-видимому, -00 равен +00 и, следовательно, 17 интерпретируется как положительный, хотя вы предполагали, что он отрицательный. Обходной путь в этом особом случае будет следующим:

Создайте функцию myTimeSign(s), которая проверяет, равны ли часы 0, и является ли первый символ вашего времени - и вернет -1, и 1 в противном случае.

myTimeSign(s) = strptime("%tH",s)==0 && s[1:1] eq '-' ? -1 : 1 

Умножьте это на свое время. Это будет использоваться в качестве обходного пути, но не в целом.

Обновление: Это было сообщено как ошибка (https://sourceforge.net/p/gnuplot/bugs/2245/) и уже исправлено в разработке версия gnuplot.

код:

### time / angle conversion
reset session
set size square
set object 1 rect from graph 0,0 to graph 1,1 fc rgb "black"

$Orion <<EOD
05:55:10.29   +07:24:25.3   0.42   Betelgeuse
05:14:32.27   -08:12:05.9   0.18   Rigel
05:25:07.87   +06:20:59.0   1.64   Bellatrix
05:32:00.40   -00:17:56.7   2.20   Mintaka
05:36:12.81   -01:12:06.9   1.69   Alnilam
05:40:45.52   -01:56:33.3   1.88   Alnitak
05:47:45.39   -09:40:10.6   2.07   Saiph
05:35:08.28   +09:56:03.0   3.47   Meissa
EOD

myTimeFmt = "%tH:%tM:%tS"

RA(n) = timecolumn(n,myTimeFmt)
myTimeSign(s) = strptime("%tH",s)==0 && s[1:1] eq '-' ? -1 : 1   # returns -1 if hours are -00
Dec(n) = timecolumn(n,myTimeFmt)*myTimeSign(strcol(n))

set xrange[strptime(myTimeFmt,"06:12"):strptime(myTimeFmt,"05:00")] reverse
set format x "%H^h%M^m" time
set yrange[strptime(myTimeFmt,"-12:00"):strptime(myTimeFmt,"+12:00")]
set format y "%tH°%tM'" time
set tics out

plot $Orion u (RA(1)):(Dec(2)):(-log10($3)+1.5) w p pt 7 ps var lc rgb "yellow" notitle
### end of code

Результат:

enter image description here

...