В gnuplot, как искать строку в файле и использовать значение после строки? - PullRequest
0 голосов
/ 24 марта 2020

Я использую gnuplot. У меня есть файл данных, который записан в блоках. Каждый блок содержит заголовок, написанный следующим образом ;low temp = 1.997 K;high temp = 2.001 K;avg. temp = 2.000 K;

После каждого заголовка у меня есть столбцы, которые содержат позицию, сигнал, .., и т. Д. c

,3784541949.42929,13.4982557296753,0.0167865138500929,0.123592436313629
,3784541949.45429,13.6974411010742,0.0387519747018814,0.145576447248459

и т. Д. вкл.

Я хочу получить среднее значение. temp = 2.00002518892288 как переменная. Таким образом, я мог построить столбцы после каждого заголовка другим цветом в соответствии с температурой, указанной в заголовке.

Ранее я написал аналогичный код

plot for[ivar=1:300:1] rawdata1 every ::(ivar*24+2)::(ivar*24+25) u 8:($11+ ivar/sepy):($4) w p pt 7 ps 0.3 palette noti "" ,\

Но в этом случае был только один блок со столбцами: положение, сигнал, температура. Я пытаюсь получить что-то похожее на следующий сюжет. Проблема в том, что новые файлы пишутся в блоках с заголовками, как я упоминал выше.

У вас есть идеи?

enter image description here

1 Ответ

0 голосов
/ 25 марта 2020

Tricky. Мы можем установить запятую и точку с запятой в качестве разделителей полей, а затем попытаться извлечь число из 4-го столбца. Так как мы знаем точный формат заголовков столбцов, мы знаем, что значение numberri c находится в заголовке подстроки [13: *]. Итерация захватывает каждый блок N, пропуская все предыдущие строки и затем считывая только точное количество точек.

  # Plot signal in column 3 at x-coordinate in column 2
  # Use the avg temperature as a title attached to the line of points

  set datafile sep ',;'
  set key textcolor variable
  unset key
  set colorbox
  plot for [N=0:*] 'data' skip 1+(202*N) every 1::0::200   \
       using 2:3:(real(columnhead(4)[13:*]))   \
       with lp pt 7 lc palette   \
       title '     '.columnhead(4) at end

enter image description here

Я сгенерировал несколько коротких блоков ненужных данных для проверки команд и тестирования с текущим gnuplot (версия 5.2.8). Возможно, вам не нужны заголовки, но они помогли мне подтвердить правильность окраски.

Редактировать

Лог c команды может стать более понятным, если извлечение цвета разделено на отдельную функцию:

  color(q) = real(columnhead(q)[13:*])
  plot for [N=0:*] 'data' skip 1+(202*N) every 1::0::200   \
       using 2:3:(color(4))   \
       with lp pt 7 lc palette
...