Как построить несколько значений Y для одного значения X в одном окне Gnuplot? - PullRequest
0 голосов
/ 27 ноября 2010

Я использую C ++ для построения графиков, используя Gnuplot. В программе C ++ я popen () файл процесса Gnuplot, и продолжаю писать в него, чтобы построить свои графики. В частности, я пишу « plot» - «используя 1: 2 с точками », а затем продолжаю писать координаты X-Y. Только для двух столбцов он работает нормально.

Теперь я изменил свою программу, чтобы генерировать более 2 столбцов. Теперь у меня есть данные в следующем формате

X, Y1, Y2, Y3, Y4, Y5

Таким образом, каждую секунду выводится одна строка (например, «1 2 3 4 5 6», где 1 - координата X, а остальные значения - координаты Y для разных кривых). Я не могу понять, как разместить все кривые в одном окне.

Если я сделаю что-то вроде следующего,

set xrange[0:5]
set yrange[0:10]
plot '-' using 1:2 with lines, '-' using 1:3 with lines
1 2 3
2 3 4
3 4 5
4 5 6
5 6 7

это дает мне ошибку, которая говорит

"warning: Skipping data file with no valid points"

, а также требует дважды нажать «e», чтобы указать конец данных.

Может быть, мне здесь чего-то не хватает.

Спасибо!

1 Ответ

2 голосов
/ 27 ноября 2010

Я могу придумать два пути, но оба они включают многократное (5) повторение ваших данных. Во-первых, несколько участков можно разделить запятыми, например:

plot '-', '-', '-', '-', '-'

Затем вы будете fprintf (...) и 'e' после каждого набора данных.

Кроме того, поскольку вы просто строите точки (не линии), вы можете просто продолжать отправлять больше данных:

fprintf(gnuplot, "plot '-' with points\n");
for (int yy = 1; yy <= 5; yy++) {
    for (int row = 0; row < len; row++) {
         fprintf(gnuplot, "%lf %lf\n", data[row][0], data[row][yy]);
    }
}
fprintf(gnuplot, "e\n");
fflush(gnuplot);
...