Comment appeler plot dans une boucle
sarah
-
sarah -
sarah -
Bonjour tous le monde
s'il vous plait j'ai un probleme que je cherche à resoudre depuit deux jour et je trouve pas de solution.
je travaille sous LINUX je veut utilisé gnuplot pour afficher le contenue de plusieur fichier dans une seul sortie mais je n'arrive pas à fair une boucle. voici le code que j'ai écrit
FILE* f1;
if (NULL == (f1 = popen("gnuplot","w")))
{
perror("gnuplot");
pclose(f1);
return 1;
}
puts("\n Connexion à gnuplot: afficher les clusters\n");
fprintf(f1," set xlabel 'Coordonnées x de chaque objet ' \n");
fprintf(f1," set ylabel 'rdonnées y de chaque objet'\n");
fprintf(f1," set title 'la liste des cluster formé' \n");
fprintf(f1,"set term post enh color \n");
fprintf(f1,"set out 'Clusters.eps'\n"); // with bounding boxes
fprintf(f1,"unset multiplot \n");
fprintf(f1,"set multiplot \n");
for(i=0;i<nb_cluster;i++)
{
fprintf(f1,"plot array \n");
}
sachant que array est une variable (chaine de caractére) qui pérmet de donnée a chaque fois un nom différent pour un fichier puisque je génére mes fichier dans une boucle
s'il vous plait aider moi et merci a l'avance
s'il vous plait j'ai un probleme que je cherche à resoudre depuit deux jour et je trouve pas de solution.
je travaille sous LINUX je veut utilisé gnuplot pour afficher le contenue de plusieur fichier dans une seul sortie mais je n'arrive pas à fair une boucle. voici le code que j'ai écrit
FILE* f1;
if (NULL == (f1 = popen("gnuplot","w")))
{
perror("gnuplot");
pclose(f1);
return 1;
}
puts("\n Connexion à gnuplot: afficher les clusters\n");
fprintf(f1," set xlabel 'Coordonnées x de chaque objet ' \n");
fprintf(f1," set ylabel 'rdonnées y de chaque objet'\n");
fprintf(f1," set title 'la liste des cluster formé' \n");
fprintf(f1,"set term post enh color \n");
fprintf(f1,"set out 'Clusters.eps'\n"); // with bounding boxes
fprintf(f1,"unset multiplot \n");
fprintf(f1,"set multiplot \n");
for(i=0;i<nb_cluster;i++)
{
fprintf(f1,"plot array \n");
}
sachant que array est une variable (chaine de caractére) qui pérmet de donnée a chaque fois un nom différent pour un fichier puisque je génére mes fichier dans une boucle
s'il vous plait aider moi et merci a l'avance
A voir également:
- Comment appeler plot dans une boucle
- Appeler en privé - Guide
- Nommez une application d'appel vidéo ou de visioconférence - Guide
- Comment appeler en france du canada ✓ - Forum Mobile
- Ecouter le repondeur de quelqu'un sans l'appeler ✓ - Forum Mobile
- Mon pc s'allume et s'éteint en boucle ✓ - Forum Matériel & Système
6 réponses
char array[100]; défini un tableau de 100 chars, pas de 100 chaines.
essayer
char *array[]={"Cluster00", "Cluster01", "Cluster02"};
ou fabriquer les noms:
char array[100];
...
for(i=0;i<3;i++)
{
sprintf(array, "plot Cluster%02d", i);
fprintf(f1, "%s\n", array);
...
essayer
char *array[]={"Cluster00", "Cluster01", "Cluster02"};
ou fabriquer les noms:
char array[100];
...
for(i=0;i<3;i++)
{
sprintf(array, "plot Cluster%02d", i);
fprintf(f1, "%s\n", array);
...
Salut Dubcek je te remercie je pense que vous avez comprit mon probleme mais j'arrive pas toujours à le regler, j'ai essayer ce que tu ma dit mais ca n'as pas marcher, j'ai aussi essayer ceci :
for(i=0;i<3;i++)
{
fprintf(f1,"plot %s \n", tableau[0]);
}
voici le code complet:
# include <stdio.h>
int main (void)
{
char* tableau[50];
int i;
tableau[0] = "Cluster00";
tableau[1] = "Cluster01";
tableau[2] = "Cluster02";
FILE* f1;
if (NULL == (f1 = popen("gnuplot","w")))
{
perror("gnuplot");
pclose(f1);
return 1;
}
puts("\n Connexion à gnuplot: afficher les clusters\n");
fprintf(f1," set xlabel 'Coordonnées x de chaque objet ' \n");
fprintf(f1," set ylabel 'rdonnées y de chaque objet'\n");
fprintf(f1," set title 'la liste des cluster formé' \n");
fprintf(f1,"set term post enh color \n");
fprintf(f1,"set out 'Clusters.eps'\n"); // with bounding boxes
fprintf(f1,"unset multiplot \n");
fprintf(f1,"set multiplot \n");
for(i=0;i<3;i++)
{
fprintf(f1,"plot %s \n", tableau[0]);
}
return 0;
}
il me donne en sorie un fichier vide et il m'affiche lors de l'exécution les erreurs suivantes:
Undefined variable Cluster00
Undefined variable Cluster01
Undefined variable Cluster02
je te remercie beaucoup et j'atend toujours la reponse
for(i=0;i<3;i++)
{
fprintf(f1,"plot %s \n", tableau[0]);
}
voici le code complet:
# include <stdio.h>
int main (void)
{
char* tableau[50];
int i;
tableau[0] = "Cluster00";
tableau[1] = "Cluster01";
tableau[2] = "Cluster02";
FILE* f1;
if (NULL == (f1 = popen("gnuplot","w")))
{
perror("gnuplot");
pclose(f1);
return 1;
}
puts("\n Connexion à gnuplot: afficher les clusters\n");
fprintf(f1," set xlabel 'Coordonnées x de chaque objet ' \n");
fprintf(f1," set ylabel 'rdonnées y de chaque objet'\n");
fprintf(f1," set title 'la liste des cluster formé' \n");
fprintf(f1,"set term post enh color \n");
fprintf(f1,"set out 'Clusters.eps'\n"); // with bounding boxes
fprintf(f1,"unset multiplot \n");
fprintf(f1,"set multiplot \n");
for(i=0;i<3;i++)
{
fprintf(f1,"plot %s \n", tableau[0]);
}
return 0;
}
il me donne en sorie un fichier vide et il m'affiche lors de l'exécution les erreurs suivantes:
Undefined variable Cluster00
Undefined variable Cluster01
Undefined variable Cluster02
je te remercie beaucoup et j'atend toujours la reponse
ce code fonctionne, mais c'est gnuplot qui génère ces erreurs ?
as-tu essayé tes commandes manuellement dans gnuplot
as-tu essayé tes commandes manuellement dans gnuplot
Salut.
Comme le remarque dubeck, je pense que l'erreur vient de Gnuplot
Si Cluster00 et cie sont des fichiers, il faut faire :
fprintf(f1,"plot '%s' \n", tableau[0]);
ou
fprintf(f1,"plot \"%s\" \n", tableau[0]);
De plus, les commandes pour le multiplot me semblent un peu légère. Il me semble qu'avant chaque appel à plot il faut spécifier les "coordonnées" du sous graphique. Si tu veux superposé les graphiques, n'utilise pas multiplot, mais utilise "replot" à la place de "plot".
Bonne chance.
Comme le remarque dubeck, je pense que l'erreur vient de Gnuplot
Si Cluster00 et cie sont des fichiers, il faut faire :
fprintf(f1,"plot '%s' \n", tableau[0]);
ou
fprintf(f1,"plot \"%s\" \n", tableau[0]);
De plus, les commandes pour le multiplot me semblent un peu légère. Il me semble qu'avant chaque appel à plot il faut spécifier les "coordonnées" du sous graphique. Si tu veux superposé les graphiques, n'utilise pas multiplot, mais utilise "replot" à la place de "plot".
Bonne chance.
Salut,
je vous remercie char Snipeur et Dubcec, vous m'avez beaucoup aider, mon probléme et présque résolu, dans le shell tous marche tres bien le probleme et quant je passe à ecrire dans un programe C. maintenant j'ai utilisé replot et ca ma données le resultat voulu méme en ecrivant dans un programme C. Le seul probléme qui me réste et que à la fin il me génére un seul fichier qui contient 3 image. la premiére represente le Cluster00 tous seul, la deuxiéme represente le Cluster00 et le Cluster01 et la troisiéme représente les trois clusters. bon c'est pas grave l'essentiel j'ai la troisieme qui me donne les trois clusters, mais j'aime bien avoir que la troisieme image, ya t'il as moyen pour l'avoir?
je vous remercie encore.
je vous remercie char Snipeur et Dubcec, vous m'avez beaucoup aider, mon probléme et présque résolu, dans le shell tous marche tres bien le probleme et quant je passe à ecrire dans un programe C. maintenant j'ai utilisé replot et ca ma données le resultat voulu méme en ecrivant dans un programme C. Le seul probléme qui me réste et que à la fin il me génére un seul fichier qui contient 3 image. la premiére represente le Cluster00 tous seul, la deuxiéme represente le Cluster00 et le Cluster01 et la troisiéme représente les trois clusters. bon c'est pas grave l'essentiel j'ai la troisieme qui me donne les trois clusters, mais j'aime bien avoir que la troisieme image, ya t'il as moyen pour l'avoir?
je vous remercie encore.
j'ai oublier de donner le code que j'ai utilisé peut etres il vas sérvir pour aider quelqu'un d'autre
au lieu de faire dans le code précident.
for(i=0;i<3;i++)
{
fprintf(f1,"plot %s \n", tableau[0]);
}
j'ai ecrit tous simplement :
fprintf(f1,"plot '%s' \n", tableau[0]);
for(i=1;i<3;i++)
{
fprintf(f1,"replot '%s' \n", tableau[i]);
}
au lieu de faire dans le code précident.
for(i=0;i<3;i++)
{
fprintf(f1,"plot %s \n", tableau[0]);
}
j'ai ecrit tous simplement :
fprintf(f1,"plot '%s' \n", tableau[0]);
for(i=1;i<3;i++)
{
fprintf(f1,"replot '%s' \n", tableau[i]);
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
déplace la ligne fprintf(f1,"set out 'Clusters.eps'\n"); à la fin de la boucle :
fprintf(f1,"plot '%s' \n", tableau[0]);
for(i=1;i<3;i++)
{
fprintf(f1,"replot '%s' \n", tableau[i]);
}
fprintf(f1,"set out 'Clusters.eps'\n");
fprintf(f1,"replot\n");Je pense que ça fonctionnera.
Merci Char Snipeur j'ai essayer ton code mais la sortie que j'ai 'Clusters.eps' je ne peut pas l'ouvrir. en faite j'ai un autre probléme quant j'ai inserer l'ancien code qui marche tous seul, dans mon application j'ai des problémes bon le contenu de mes fichier {Cluster00,Cluster01,..} je les génere au fur et à mesure dans mon code, quant je términe complétement de genérer le contenu de mes fichier je sort de la boucle et j'essaye de représenter les resultats en utilisant le code précident mais il m'affiche les erreur suivants
warning: unreadable file "(null)"
No data in plot
replot 'Cluster02'
no previous plot..
malgré que je sais qu'a cette etape mes fichiers sont bien générer. j'ai met un sleep avant d'insérer le code qui permet d'appelet gnuplot mais c'est pareil.
j'espere que vous avez une aidée pour ça merci beaucoup
warning: unreadable file "(null)"
No data in plot
replot 'Cluster02'
no previous plot..
malgré que je sais qu'a cette etape mes fichiers sont bien générer. j'ai met un sleep avant d'insérer le code qui permet d'appelet gnuplot mais c'est pareil.
j'espere que vous avez une aidée pour ça merci beaucoup
merci Char Snipeur ton code marche tres bien, mais pour l'autre probléme j'ai vérifier la fermeture de tous mes fichiers j'ai essayer directement
fprintf(f1,"plot 'Cluster00','Cluster01','Cluster03'"); dans mon application au lieux de la boucle et ça marche tres bien, j'ai essayer le nouveau code que tu ma donné dans mon application il me donne en résultat que le Cluster02 ? et il m'affiche l'erreur suivante:
warning: skiping unreadable file "(null)"
malgré que j'affiche le contenu du tableau[0] ,tableau[1]et tableau[2] qui me donne effectivement Cluster00, Cluster01 et Cluster02. je vois pas il est ou le probléme
j'espere que tu aura une idée our mon probléme je te remercie encore
fprintf(f1,"plot 'Cluster00','Cluster01','Cluster03'"); dans mon application au lieux de la boucle et ça marche tres bien, j'ai essayer le nouveau code que tu ma donné dans mon application il me donne en résultat que le Cluster02 ? et il m'affiche l'erreur suivante:
warning: skiping unreadable file "(null)"
malgré que j'affiche le contenu du tableau[0] ,tableau[1]et tableau[2] qui me donne effectivement Cluster00, Cluster01 et Cluster02. je vois pas il est ou le probléme
j'espere que tu aura une idée our mon probléme je te remercie encore
remet ton code complet.
fait un printf en parallèle de tes fprintf pour vérifier ce qui est écrit.
Ho ! et puis j'ai opublié dans le dernier truc que je t'ai donné, il faut mettre fprintf(f1,"\n"); après la boucle.
Une autre solution pour faire tout ça, c'est décrire dans un fichier régulier et de demander à Gnupliot de charger ce fichier.
fait un printf en parallèle de tes fprintf pour vérifier ce qui est écrit.
Ho ! et puis j'ai opublié dans le dernier truc que je t'ai donné, il faut mettre fprintf(f1,"\n"); après la boucle.
Une autre solution pour faire tout ça, c'est décrire dans un fichier régulier et de demander à Gnupliot de charger ce fichier.
mon application contien plus de mille ligne de code pour cela je te donne une portion; mais j'ai pas comprit ta remarque:
"fait un printf en parallèle de tes fprintf pour vérifier ce qui est écrit."
for(i=0;i<(dd-1);i++)
{
........ya plusieur ligne de code ici ou a chaqiue etape de la boucle je calcle le debut et la fin de cluster
if((fincluster-debutcluster)>=MinPts)
{
nb_cluster=nb_cluster+1;
h4=debutcluster;
OrderFile= fopen("OrderFile.txt", "r");
for(h6=0;h6<h4;h6++)
{
fscanf(OrderFile, "%d %f",&b21,&b31);
}
//printf("\n voici le premier cluster \n ");
for(h4=debutcluster;h4<=fincluster;h4++)
{
fscanf(OrderFile, "%d %f",&b21,&b31);
fichier= fopen("test.txt", "a+");
for(h5=0;h5<=nb_ligne;h5++)
{
fscanf(fichier, "%f %f",&b22,&b23);
if(h5==b21)
{
break;
}
}
fclose(fichier);
Cluster_Rep= fopen("Cluster_Rep.txt", "a+");
fprintf(Cluster_Rep, " %f %f\n",b22,b23);
fclose(Cluster_Rep);
}
fclose(OrderFile);
}
array[7] = (char)(tens + '0');
array[8] = (char)(ones + '0');
rename("Cluster_Rep.txt",array);
tableau[nb_cluster]=array;
printf("tableau[nb_cluster] %s",tableau[nb_cluster]);
if(ones==9)
{
ones=0;
tens=tens+1;
}
else
{
ones=ones+1;
}
}
//--------------------- Représentation des Clusters avec Gnuplot
FILE* f1;
if (NULL == (f1 = popen("gnuplot","w")))
{
perror("gnuplot");
pclose(f1);
return 1;
}
puts("\n Connexion à gnuplot: afficher les clusters\n");
fprintf(f1," set xlabel 'Coordonnées x de chaque objet ' \n");
fprintf(f1," set ylabel 'rdonnées y de chaque objet'\n");
fprintf(f1," set title 'la liste des cluster formé' \n");
fprintf(f1,"set term post enh color \n");
fprintf(f1,"set out 'Clusters.eps'\n"); // with bounding boxes
//fprintf(f1,"plot 'Cluster00','Cluster01','Cluster02' \n");
fprintf(f1,"plot '%s' \\\n", tableau[0]);
for(i=1;i<nb_cluster;i++)
{
fprintf(f1,", '%s' \\\n", tableau[i]);
}
//------------------------------------------------------FIN---------------------------------
je te remercie beaucoup pour tes réponses.
"fait un printf en parallèle de tes fprintf pour vérifier ce qui est écrit."
for(i=0;i<(dd-1);i++)
{
........ya plusieur ligne de code ici ou a chaqiue etape de la boucle je calcle le debut et la fin de cluster
if((fincluster-debutcluster)>=MinPts)
{
nb_cluster=nb_cluster+1;
h4=debutcluster;
OrderFile= fopen("OrderFile.txt", "r");
for(h6=0;h6<h4;h6++)
{
fscanf(OrderFile, "%d %f",&b21,&b31);
}
//printf("\n voici le premier cluster \n ");
for(h4=debutcluster;h4<=fincluster;h4++)
{
fscanf(OrderFile, "%d %f",&b21,&b31);
fichier= fopen("test.txt", "a+");
for(h5=0;h5<=nb_ligne;h5++)
{
fscanf(fichier, "%f %f",&b22,&b23);
if(h5==b21)
{
break;
}
}
fclose(fichier);
Cluster_Rep= fopen("Cluster_Rep.txt", "a+");
fprintf(Cluster_Rep, " %f %f\n",b22,b23);
fclose(Cluster_Rep);
}
fclose(OrderFile);
}
array[7] = (char)(tens + '0');
array[8] = (char)(ones + '0');
rename("Cluster_Rep.txt",array);
tableau[nb_cluster]=array;
printf("tableau[nb_cluster] %s",tableau[nb_cluster]);
if(ones==9)
{
ones=0;
tens=tens+1;
}
else
{
ones=ones+1;
}
}
//--------------------- Représentation des Clusters avec Gnuplot
FILE* f1;
if (NULL == (f1 = popen("gnuplot","w")))
{
perror("gnuplot");
pclose(f1);
return 1;
}
puts("\n Connexion à gnuplot: afficher les clusters\n");
fprintf(f1," set xlabel 'Coordonnées x de chaque objet ' \n");
fprintf(f1," set ylabel 'rdonnées y de chaque objet'\n");
fprintf(f1," set title 'la liste des cluster formé' \n");
fprintf(f1,"set term post enh color \n");
fprintf(f1,"set out 'Clusters.eps'\n"); // with bounding boxes
//fprintf(f1,"plot 'Cluster00','Cluster01','Cluster02' \n");
fprintf(f1,"plot '%s' \\\n", tableau[0]);
for(i=1;i<nb_cluster;i++)
{
fprintf(f1,", '%s' \\\n", tableau[i]);
}
//------------------------------------------------------FIN---------------------------------
je te remercie beaucoup pour tes réponses.
je vous remerci beaucoup Dubcek mais mon probléme n'est pas encore réglé. je pense que je n'est pas bien expliquée. puisque moi j'ai un ensemble de fichiers exp {Cluster00,Cluster01,....} alors je met l'ensemble de ces noms de fichiers dans un tableau array ensuite j'essaye d'appeler la commande plot dans une boucle bon j'aurai pu eviter d'utiliser la boucle si je connais au préalable le nombre de fichier que j'ai mais ce n'est pas le cas. j'ai essayer ce que vous m'avez dit et j'ai des erreurs:
voici le code que j'ai tapée:
# include <stdio.h>
int main (void)
{
char array[100];
int i;
array[0]="Cluster00";
array[1]="Cluster01";
array[2]="Cluster02";
FILE* f1;
if (NULL == (f1 = popen("gnuplot","w")))
{
perror("gnuplot");
pclose(f1);
return 1;
}
puts("\n Connexion à gnuplot: afficher les clusters\n");
fprintf(f1," set xlabel 'Coordonnées x de chaque objet ' \n");
fprintf(f1," set ylabel 'rdonnées y de chaque objet'\n");
fprintf(f1," set title 'la liste des cluster formé' \n");
fprintf(f1,"set term post enh color \n");
fprintf(f1,"set out 'Clusters.eps'\n"); // with bounding boxes
fprintf(f1,"unset multiplot \n");
fprintf(f1,"set multiplot \n");
for(i=0;i<3;i++)
{
fprintf(f1,"plot %s \n", array[i]);
}
return 0;
}
et voici les erreurs que j'ai apprés la compélation:
essa1.c:9: warning: assignment makes integer from pointer without a cast
essa1.c:10: warning: assignment makes integer from pointer without a cast
essa1.c:11: warning: assignment makes integer from pointer without a cast