Je suis tombé sur ce tout en recherchant quelque chose d'autre concernant gnuplot. Même si c'est une vieille question, je pensais que je contribuerais un exemple de code. J'utilise ceci pour un de mes programmes, et je pense que c'est un travail assez ordonné. AFAIK, ce PIPE ne fonctionne que sur les systèmes Unix (voir la modification ci-dessous pour les utilisateurs de Windows). Mon installation gnuplot est l'installation par défaut du référentiel Ubuntu.
#include <stdlib.h>
#include <stdio.h>
#define NUM_POINTS 5
#define NUM_COMMANDS 2
int main()
{
char * commandsForGnuplot[] = {"set title \"TITLEEEEE\"", "plot 'data.temp'"};
double xvals[NUM_POINTS] = {1.0, 2.0, 3.0, 4.0, 5.0};
double yvals[NUM_POINTS] = {5.0 ,3.0, 1.0, 3.0, 5.0};
FILE * temp = fopen("data.temp", "w");
/*Opens an interface that one can use to send commands as if they were typing into the
* gnuplot command line. "The -persistent" keeps the plot open even after your
* C program terminates.
*/
FILE * gnuplotPipe = popen ("gnuplot -persistent", "w");
int i;
for (i=0; i < NUM_POINTS; i++)
{
fprintf(temp, "%lf %lf \n", xvals[i], yvals[i]); //Write the data to a temporary file
}
for (i=0; i < NUM_COMMANDS; i++)
{
fprintf(gnuplotPipe, "%s \n", commandsForGnuplot[i]); //Send commands to gnuplot one by one.
}
return 0;
}
EDIT
Dans ma demande, j'ai aussi couru dans le problème que l'intrigue ne semble pas que le programme d'appel est fermé. Pour contourner cela, ajoutez un fflush(gnuplotPipe)
après avoir utilisé fprintf
pour lui envoyer votre dernière commande.
J'ai également vu que les utilisateurs de Windows peuvent utiliser _popen
à la place de popen
- mais je ne peux pas le confirmer car je n'ai pas installé Windows.
EDIT 2
On peut éviter d'avoir à écrire dans un fichier en envoyant la commande gnuplot plot '-'
suivi par des points de données, suivi de la lettre « e ».
par exemple.
fprintf(gnuplotPipe, "plot '-' \n");
int i;
for (int i = 0; i < NUM_POINTS; i++)
{
fprintf(gnuplotPipe, "%lf %lf\n", xvals[i], yvals[i]);
}
fprintf(gnuplotPipe, "e");
Peut-être vérifier la fonction 'installation privée. – sje397