Gnuplot
Résolu/Fermé
nil
-
Modifié par crapoulou le 6/11/2016 à 22:18
mamiemando Messages postés 33650 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2025 - 4 déc. 2016 à 23:05
mamiemando Messages postés 33650 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2025 - 4 déc. 2016 à 23:05
1 réponse
mamiemando
Messages postés
33650
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
30 avril 2025
7 846
Modifié par mamiemando le 4/12/2016 à 23:06
Modifié par mamiemando le 4/12/2016 à 23:06
Bonjour,
Pour utiliser gnuplot, il faut stocker tes points dans un fichier de données (un fichier texte traditionnellement une extension ".dat").
Ensuite sois tu fais un script gnuplot (fichier ".gnu") qui définira ton fichier de données (e.g. toto.dat), tes axes et ton format de sortie (personnellement je préconise svg pour avoir un rendu vectoriel).
Dans le code suivant, le code cpp génère le fichier toto.dat et le fichier toto.gnu :
Il ne reste plus qu'à le compiler et le lancer, puis appeler gnuplot.
Tu auras alors un fichier toto.svg, que tu peux afficher par exemple avec chrome/chromium.
Bonne chance
Pour utiliser gnuplot, il faut stocker tes points dans un fichier de données (un fichier texte traditionnellement une extension ".dat").
Ensuite sois tu fais un script gnuplot (fichier ".gnu") qui définira ton fichier de données (e.g. toto.dat), tes axes et ton format de sortie (personnellement je préconise svg pour avoir un rendu vectoriel).
Dans le code suivant, le code cpp génère le fichier toto.dat et le fichier toto.gnu :
#include <iostream> #include <fstream> bool make_dat(const char *filename_wext, double ui, double r) { bool ret = true; std::string filename(filename_wext); filename += ".dat"; std::ofstream ofs(filename); if (ofs) { for (unsigned i = 0; i < 100; i++) { ui = r * (1 - ui); ofs << i << '\t' << ui << std::endl; } ofs.close(); std::cerr << filename << " written" << std::endl; } else { std::cerr << "Cannot write " << filename << std::endl; ret = false; } return ret; } bool make_gnu(const char *filename_wext) { bool ret = true; std::string filename(filename_wext); filename += ".gnu"; std::ofstream ofs(filename); if (ofs) { ofs << "set terminal svg" << std::endl << "set output \"" << filename_wext << ".svg\"" << std::endl << "plot \"" << filename_wext << ".dat\" using 1:2 with lines" << std::endl; ofs.close(); std::cerr << filename << " written" << std::endl; } else { std::cerr << "Cannot write " << filename << std::endl; ret = false; } return ret; } int main() { double ui = 0; double r = 2; const char *filename_wext = "toto"; make_dat(filename_wext, ui, r); make_gnu(filename_wext); return 0; }
Il ne reste plus qu'à le compiler et le lancer, puis appeler gnuplot.
(mando@velvet) (~) $ g++ toto.cpp && ./a.out && gnuplot toto.gnu
toto.dat written
toto.gnu written
Tu auras alors un fichier toto.svg, que tu peux afficher par exemple avec chrome/chromium.
Bonne chance