2010-11-26 7 views
0

J'utilise C++ pour tracer des graphes en utilisant Gnuplot. Dans le programme C++, j'ouvre() un fichier de processus Gnuplot, et je continue d'écrire pour tracer mes graphiques. Spécifiquement, j'écris "plot" - "en utilisant 1: 2 avec les points", puis continuez à écrire les coordonnées X-Y. Pour seulement deux colonnes, cela fonctionne bien.Comment tracer plusieurs valeurs Y pour une seule valeur X dans une seule fenêtre Gnuplot?

Maintenant, j'ai modifié mon programme pour générer plus de 2 colonnes. J'ai maintenant des données dans le format suivant

X, Y1, Y2, Y3, Y4, Y5

Ainsi, chaque seconde, il sort une ligne (par exemple "1 2 3 4 5 6", où 1 est la coordonnée X, et le reste des valeurs sont des coordonnées Y pour différentes courbes). Je ne peux pas comprendre comment adapter toutes les courbes dans une seule fenêtre.

Si je fais quelque chose comme ce qui suit,

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 

il me donne une erreur qui dit

"warning: Skipping data file with no valid points" 

et exige également la touche « e » deux fois pour indiquer la fin des données.

Peut-être qu'il me manque quelque chose de minuscule ici.

Merci!

Répondre

2

Je peux penser à deux façons, mais elles impliquent l'itération de vos données plusieurs fois (5). Tout d'abord, plusieurs tracés peuvent être séparés par des virgules comme par exemple:

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

Vous serez alors fprintf (...) un « e » après chaque série de données.

De plus, puisque vous êtes juste tracer des points (pas de lignes), vous pouvez simplement continuer à envoyer plus de données:

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); 
+0

Je tracer des lignes en fait, de sorte que la première approche semble fonctionner. Maintenant, je comprends pourquoi il m'a incité à appuyer deux fois sur "e". Merci! :) – Siddhant

Questions connexes