Как выполнить sprintf () последнее значение данных в ключе Gnuplot? - PullRequest
2 голосов
/ 13 июля 2020

Я работаю над графиком температуры и хотел бы поместить последнюю точку данных в заголовок. Я могу использовать column(2), чтобы сделать это, но я также хотел бы добавить некоторый описательный текст. Я пытаюсь выполнить приведенный ниже код, чтобы объединить некоторый текст со значением данных, но получаю эту ошибку: строка 0: f_sprintf: попытка напечатать числовое значение c в строковом формате

plot "/tmp/data.txt" using 1:2 with lines ls 2 title sprintf('Current :%sF', column(2))

Я пробовал изменить модификатор sprintf на % d вместе с различными вариантами конкатенации с символом точки и не нашел правильной комбинации.

Ответы [ 2 ]

3 голосов
/ 13 июля 2020

Скорее всего есть разные решения. Первая возможность, которая приходит мне в голову (я предполагаю, что требуется gnuplot> 5.2), это использование keyentry, проверьте help keyentry. При построении вы назначаете столбец 2 переменной. После построения графика эта переменная содержит последнее значение столбца 2, которое вы используете позже в keyentry, которое является ключевым элементом без вывода на график. Также будут обходные пути для более старых версий gnuplot.

Код:

### last value into key
reset session

$Data <<EOD
1 7.1
2 6.2
3 5.3
4 4.4
5 3.5
6 2.6
7 1.7
8 0.8
EOD

plot $Data u 1:(a=$2) w lp pt 7 lc 1 notitle, \
     keyentry w lp pt 7 lc 1 ti sprintf("Last y value: %g",a)

### end of code

Результат:

введите описание изображения здесь

2 голосов
/ 13 июля 2020

Проблема здесь в том, что строка title оценивается gnuplot перед тем, как данные анализируются и строится график.

Уловка состоит в том, чтобы сохранить последнее значение температуры, и затем постройте его.

T=0
plot "/tmp/data.txt" using 1:(T=column(2)) w l ls 2 notitle, \
     1/0 w l ls 2 title sprintf('Current: %.1fF', T)
...