LINUX.ORG.RU

Вопрос для людей хорошо разбирающихся в GNUplot

 ,


0

1

Проблема в том, что Сабж отказывается рисовать линии. История такова: Есть набор данных(сообщений) вида: «дата» - «данные». Все «даты» - есть. А вот данные могут отсутствовать, в этом случае там прописан знак отсутствующих данных - «#». Также данные идут не подряд, а раз в n сообщений. Пример:

даты данные

120911 #

120912 4

120913 #

120914 #

120915 5

120916 #

etc..

Мультиплот включен. set key autotitle columnhead; - включено. set datafile missing «#»; - наличествует Заранее номер столбца не известен, вызов колонки с данными идёт через название столбца - (column('название_столбца')) Как ни пытался - нарисовать линии не получается.

Есть ли какое решение этой проблемы? Как добиться от GNUplota игнорирования строк с отсутствующими данными(#) и рисования линии по существующим данным?

set style data lines

$ cat gnuplot.file 
set datafile missing "#"
set style data lines
plot "data.in"

$ cat data.in 
120911 #
120912 4
120913 #
120914 #
120915 5
120916 #

$ gnuplot -p gnuplot.file
anonymous ()
Ответ на: комментарий от anonymous

И что изменится? Чем это отличается от прописывания через with при вызове plot?

$ cat data.dat
yy/mm/dd        data
120911  NaN
120912  4
120913  NaN
120914  NaN
120915  5

$ cat gnuplot.file
set terminal postscript;
set output 'test1.ps'; 
set xdata time;
set timefmt "%y%m%d"; 
set format x "%d.%m";
set key autotitle columnhead;
set xrange ['120911':'120916'];
set yrange [*:*];
set datafile missing 'NaN';
plot "data.dat" using 1:(column('data')) with linespoints lt rgb '#FF0000' lw 2 pt 7 ps 1; #нужно и не работает - рисует только точки
plot "data.dat" using 1:2 with linespoints lt rgb '#FF0000' lw 2 pt 7 ps 1; #а здесь работает, но номер столбца программа заранее не знает, только его название, поэтому не могу так поступить

$ gnuplot -p gnuplot.file

Это не решение. Есть у кого-нибудь ещё идеи?

Shtirliz72 ()
Ответ на: комментарий от anonymous

sed'ом дропунуть строки с # перенаправить на gnu plot? Не?

В других столбцах тоже содержатся '#'(NaN). Или как-то можно через sed зная название столбца исключить '#' только в этом столбце?

Shtirliz72 ()
Ответ на: комментарий от Shtirliz72
$ cat gnuplot.file
set terminal postscript;
set output 'test1.ps';
set xdata time;
set timefmt "%y%m%d";
set format x "%d.%m";
set key autotitle columnhead;
set xrange ['120911':'120916'];
set style data lines

xlast=ylast=NaN;
plot "<awk '{gsub(/NaN/,-1); print}' data.dat" using \
(column("data")!=-1?(xlast=stringcolumn(1),xlast):xlast): \
(column("data")!=-1?(ylast=column("data"),ylast):ylast) \
with linespoints lt rgb '#FF0000' lw 2 pt 7 ps 1;

вот с исключением на awk-е (более быстрый вариант):

$ cat gnuplot.file
set terminal postscript;
set output 'test1.ps';.
set xdata time;
set timefmt "%y%m%d";.
set format x "%d.%m";
set key autotitle columnhead;
set xrange ['120911':'120916'];
set style data lines

xlast=ylast=NaN;
plot "<awk 'BEGIN{k=-1; print \"yy/mm/dd data\"} '\
'{ n=split(\$0,M); '\
'  if(k==-1) { for(k=1;k<=n;k++) if(M[k]==\"data\") break;} '\
'  else { if(M[k]!=\"NaN\") print M[1]\" \"M[k];}}' data.dat" \
using 1:2 with linespoints lt rgb '#FF0000' lw 2 pt 7 ps 1;
и ещё, пиши в следующий раз сразу пример, без него совсем непонятно что у тебя не получается.

anonymous ()
Ответ на: комментарий от anonymous

а ещё можно сделать все средствами gnuplot:

$ cat gnuplot.file
set terminal postscript;
set output 'test1.ps';

set xdata time;
set timefmt "%y%m%d";
set format x "%d.%m";
set key autotitle columnhead;
set xrange ['120911':'120916'];
set style data lines

xlast=ylast=NaN;
plot 'data.dat' using \
((stringcolumn("data") eq "NaN")?xlast:(xlast=stringcolumn(1),xlast)): \
((stringcolumn("data") eq "NaN")?ylast:(ylast=column("data"),ylast)) \
with linespoints lt rgb '#FF0000' lw 2 pt 7 ps 1;

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.