Как сделать скрипт стрелки в gnuplot из серии сброшенных данных из текстового файла - PullRequest
0 голосов
/ 11 октября 2019

Мой файл данных:

============

     This is your required output
Range:  -42.3732  666.3634eV  Yi, Yf > DATA-point FIX:  0.0000 0.0000 0.0000   x LIST   0.0000
DATA-point FIX:  0.5000 0.0000 0.0000   x LIST   0.5000
DATA-point FIX:  0.7500 0.3750 0.2641   x LIST   1.0224
DATA-point FIX:  0.0000 0.0000 0.0000   x LIST   1.9015
DATA-point FIX:  0.3750 0.3750 0.5282   x LIST   2.6500
DATA-point FIX:  0.5000 0.5000 0.3522   x LIST   2.8995
DATA-point FIX:  0.0000 0.0000 0.0000   x LIST   3.6895
DATA-point FIX:  0.5000 0.0000 0.3522   x LIST   4.3010
DATA-point FIX:  0.6250 0.2500 0.4402   x LIST   4.5941
DATA-point FIX:  0.7500 0.2500 0.3522   x LIST   4.7470
DATA-point FIX:  0.5000 0.5000 0.3522   x LIST   5.1005
DATA-point FIX:  0.5000 0.2500 0.5282   x LIST   5.4063

done junk has written below this part

======= *

Iхотите установить число

`-42.3732 and 666.3634 as y-axis limit` 

, а затем хотите нарисовать стрелку из

 Xi, Yi to Xi, Yi nohead

, где Xi - это число переменной и зависит от файла данных, но я могу выполнить поиск с помощью

 grep LIST data.dat |  awk '{print $NF}'

и

Yi and Yf are the y-axis limit as mentioned above but changes according to data file so these numbers are not the one that I mention here).

Я хочу нарисовать стрелки на каждой из этих точек от Xi, Yi до Xi, Yf в моем сценарии GNU.

У меня есть несколькоИдея, что это может быть сделано, если мы сохраним вышеупомянутые данные в виде переменной и сделаем так

set VARIABLE

, где переменная похожа на это

VARIABLE=`arrow from Xi,Yi to Xi,Yf nohead ; set`

и для следующей части Iхотите пометить каждую Xi на оси x какой-нибудь буквой, скажем

X, Y, Z, .....

Не могли бы вы посоветовать мне, как мне управлять этим в gnuplot?

1 Ответ

1 голос
/ 06 ноября 2019

Мне все еще не понятно из вашего описания, где взять какие значения.

Насколько я понимаю, у вас есть один (или несколько?) Файлы, которые имеют структуру, которую вы задали (тогда как структура второй строки с > и данные после этого выглядят странно для меня),Как я понимаю, команда awk извлекает значение последнего токена (столбца) в строке. Итак, я предполагаю, что xi является последним значением каждой строки. В строке 2 xi будет в столбце 14, а во всех следующих строках xi будет в столбце 8.

Процедура в gnuplot (без awk) будет выглядеть следующим образом:

  1. выводит файл в фиктивную таблицу. Если номер строки равен 1 (то есть ($0==1)), присвойте значения в столбце 2 $2 и столбце 3 $3 Ymin и Ymax соответственно. Всегда присваивайте значение столбца 8 $8 для Xmax, поэтому после построения графика Xmax будет содержать последнее значение, здесь 5.4063.
  2. , затем выведите файл with vectors (пропуская первую строку) и используйтестолбец 14 для следующей строки и столбец 8 для всех остальных строк как xi значение.

После вашего комментария это, вероятно, больше, чем вы хотите. Вы можете получить подробную информацию из справки gnuplot, набрав help <keyword>, например, help vectors.

Код: (изменено после комментариев)

### Extract values from file
reset session

FILE = 'tbExtractArrow.dat'

# extract Ymin, Ymax and Xmax
set table $Dummy
    plot FILE u ($0==1?(Ymin=$2,Ymax=$3):NaN,Xmax=$8) w table
unset table
print Ymin,Ymax,Xmax

# define formula for column to extract xi
myColumn(n) = n==0 ? 14 : 8

set xrange [0:Xmax]
set yrange[Ymin:Ymax]
set xtics ( "{/Symbol G}" 0.00000, "{/Times-New, F}" 0.27445, "{/Times-New Q}" 0.46775, "{/Times-New, Z}" 0.74220, "{/Symbol G}" 0.93550, "etc." 1.4) 

plot FILE skip 1 u (column(myColumn($0))):(Ymin):(0):(Ymax-Ymin) w vectors nohead lw 2 lc rgb "red" notitle
### end of code

Результат:

enter image description here

...