Gnuplot aus C/C++ (unter Verwendung einer geschriebenen .gpl)
-
Nach ausgiebiger Google-suche bin ich schon ueber viele interessante Threads gestossen, jedoch noch nicht auf das, was ich mir vorstelle. Deswegen meine Frage:
Ich habe ein Programm, was mir (nach intensiven Rechnungen) recht grosse, schon auf gnuplot angepasste, 2-spaltige (eigentlich 10 Spalten, aber will ja nur 2 plotten) .dat-files ausgibt. Die Files befinden sich in einem Unterordner des Hauptprogramms, mit Namen: subfolder.
Bisher habe ich immer "gnuplot" in diesem Unterordner aufgerufen und via .gpl (command-list) meine Bilder per Hand von den Datensaetzen erstellt.
Jetzt moechte ich aber folgendes:
Wenn mein Programm fertig mit der Berechnung der Datensaetze (also mehrere .dat files) ist, dann soll es von selbst gnuplot (wesentlich ist, dass es dieses programm fuer das unterverzeichnis aufruft, damit ich meine .gpl anwenden kann) aufrufen und sowohl meine "plot.gpl" als auch meine "png.gpl" ausfuehren, damit auf dem Desktop ein Bild zusehen ist, dieses gleichzeitig aber auch noch einmal in dem "subfolder" gespeichert ist.
Hat jemand ne Idee??
hab schon einiges gelesen, aber was ich nicht moechte, ist: Meine Daten direkt an gnuplot geben. Ich brauch die berechneten Files noch fuer andere Sachen, deswegen suche ich nach der oben beschriebenen Moeglichkeit.MFG Renscher
PS: Danke fuer das verwendete Hirnschmalz!:)
-
Ich habe damals mittels system gnuplot gestartet und dem Programm das Plotkommando in seine Shell gepiped:
std::string echo = "echo \""; echo += plotcmd + "\" | gnuplot -persist"; system(echo.c_str());
Es gibt auch die Moeglichkeit, mittels popen gnuplot zu starten und die Daten (ja, die ganze Tabelle) an gnuplot zu schicken.
-
Hi,
danke fuer die Antwort. Dein letzter SatzEs gibt auch die Moeglichkeit, mittels popen gnuplot zu starten und die Daten (ja, die ganze Tabelle) an gnuplot zu schicken.
stellt ja gerade das dar, was ich nicht moechte (wie ja gut zu lesen ist!:) ).
Zu deinem Vorschlag: das funktioniert? Schliesslich ist mein Problem: a) ich moechte Gnuplot in einem Unterordner aufrufen (weil da die files liegen) und b) ich moechte gnuplot gleich noch das Kommande mitschicken, dass es "plot.gpl" ausfuehren soll.
Das scheint bei dir noch nicht enthalten zu sein?!MFG Renscher
-
a) Wo die Dateien liegen ist doch egal.
b)plotcmd
ist ein String, in dem du alles reinschreiben kannst, als ob es direkt bei Gnuplot eingegeben wurde.
-
Reicht es nicht wenn du dir ein Bash-Script schreibst, was erst dein Programm aufruft und dann dein Bild öffnet? Hab da mal was von ner alten Arbeit rausgekramt:
T=200
./program T;i++))
do
echo "set terminal png size 1024,768; \
set zrange [-0.0027:0.0027]; \
set cbrange [-0.0027:0.0027]; \
set out \"hyi.png\\"; \ splot \\"hy.dati\" with pm3d; \
| gnuplot -persist
echo "Timestep $i rendered"
doneecho "set xlabel \"Timestep\"; \
set ylabel \"Error\"; \
plot \"errors.dat\" title \"Error\" with lines;" \
| gnuplot -persistDas plottet hy.dat0 bis hy.dat200, macht daraus PNG's und plottet error.dat und öffnet es.
Vielleicht hilft es dir ja.
Bitte sag jetzt nicht dass du Windows benutzt :D.
Dann ist das natürlich nutzlos für dich.
-
K, das batch-script is schonma gar nicht so schlecht (und nein, ich sitze nich an nem Windows PC..sondern SUSE-Linux. @home hab ich auch Ubuntu dabei).
Mein Ziel ist eben gewesen, dass ich das alles aus einer .x datei bekomme, quasi einem mainprogramm, ohne von aussen sowas wie ne batch etc. zu haben, da ich das Programm (wegen Studium) ja auch vorstellen muss und die schon sowas erwarten."\" | gnuplot -persist";
Mich hatte nur sowas gewundert, denn du hast da ja schon mehrere " in dem Aufruf, aber wenn er das syntaktisch hinbekommt, dann sollte es gehen! Ich schau mal.
Bin nat. auch fuer weitere Vorschlaege offen.
Und schonmal danke bisher.MFG Renscher
-
Eventuell ist das was für Dich. Ich habe es selber noch nie getestet, und weiß nicht, ob es großartig hilft, aber ich hatte das jetzt bei dem Thema irgendwie im Hinterkopf: http://www.suiri.tsukuba.ac.jp/~asanuma/gnuplot++/