Punkte in GNUplot nummerieren

Gast #4979141
Lesenswert?
• ▲
▼
Hallo!

Ich muss Messpunkte mit GNUplot darstellen.

Dabei verwende ich den Befehl:

plot '-' with lines
x y
x y
x y
...
x y
e

Soweit passt es auch.

Aber: wie könnte man noch machen, dass Nummern bei den Punkten im 
Graphen angeschrieben stehen könnten?

Also z.B. hat der erste Punkt die Nummer 229 und der zweite die Nummer 
212 (unabhängig von der Plot-Reihenfolge).

Danke im Voraus!
Gast #4979303
Lesenswert?
• ▲
▼
Hallo!

Danke für die Antwort, sie hat mich um einiges weitergebracht.

Eines ist mir jedoch noch unklar:

Also ich rufe das ganze aus einem C-Programm aus auf.

Wenn ich mit:

fprintf(gpl, "plot '-' using 1:2:3 w labels\n");

das Plotten beginne und mit:

fprintf(gpl, "%.1f %.1f (%ld)\n", p->x, p->y, p->n); //x-Wert, Y-Wert, 
Nummer

die Punkte in einer Schleife nacheinander übergebe und mit

fprintf(gpl, "e\n");

abschließe, werden nur die Labels geplottet.

Ich möchte aber, dass die Punkte auch verbunden werden.

Ein "with lines" lässt sich nicht hinzufügen. Ich finde auch sonst keine 
Möglichkeit, den Befehl anzufügen.

Habe schon mehrfach gegoogelt mit verschiedenen Suchbegriffen, aber 
nichts konnte mir den richtigen Denkanstoß geben.

Danke für alle Hinweise im Voraus!
Moderator #4979394
Lesenswert?
• ▲
▼
Um Linien und Labels zu plotten, bedarf es zweier Plots in der Form

1
plot <erster Plot> with lines , <zweiter Plot> with labels

Kommen die Daten aus einer Datei, ist das kein Problem, dann wird die
Datei einfach zweimal gelesen. Inline-Daten mit '-' als Pseudodateinamen
können aber nur einmal gelesen werden, der zweite Plot erwartet einen
neuen Inline-Datensatz. Um zweimal denselben Datensatz zu plotten,
müsste dieser also doppelt angegeben werden.

Es gibt aber noch eine weitere Möglichkeit, Inline-Daten anzugeben, so
dass sie auch mehrfach genutzt werden können, nämlich als Here-Document
(wie in der Shell).

Hier ist ein kleines Beispiel:

1
$mydata << EOD
2
# x  y label
3
  0  0  229
4
  1  1  212
5
  2  4  314
6
  3  9  272
7
  4 16  333
8
  5 25  999
9
EOD
10
set xrange [-1:6]
11
set yrange [-5:30]
12
set grid
13
plot $mydata with linespoints pt 7, $mydata with labels left offset 0.5,-0.5 notitle

Edit:

Das Feature nennt sich "named data block" und ist seit Version 5
verfügbar, also noch ziemlich frisch.
Angehängte Dateien:
Gast #4979584
Lesenswert?
• ▲
▼
Vielleicht noch eine kurze Frage:

Wie schließe ich aus dem C-Programm heraus das GNUplot-Fenster?

fprintf(gpl, "exit\n");
fflush(gpl);

funktioniert leider nicht. Man muss das Fenster immer manuell schließen.

(Aufgerufen wird das ganze mit -persist)

Danke im Voraus!
Moderator #4979915
Lesenswert?
• ▲
▼
Progger schrieb:
> Wie schließe ich aus dem C-Programm heraus das GNUplot-Fenster?
>
> ...
>
> (Aufgerufen wird das ganze mit -persist)

Die Option -persist dient ja gerade dazu, das Schließen des Fensters dem
Benutzer zu überlassen.

Aber auch ohne -persist kann ich nicht auf Anhieb sagen, wie das geht,
zumal es hier evtl. OS-spezifische Unterschiede gibt und ich mit Gnuplot
unter Windows keine Erfahrung habe.

Edit:

Folgendes Progrämmchen funktioniert unter Linux perfekt:

1
#include <stdio.h>
2
#include <unistd.h>
3

4
int main(void) {
5
  FILE *gpl = popen("gnuplot", "w");
6

7
  fprintf(gpl, "set samples 1000\n");
8
  for(int i=0; i<1000; i++) {
9
    fprintf(gpl, "plot sin(x+%f)\n", 0.05*i);
10
    fflush(gpl);
11
    usleep(10000);
12
  }
13
  pclose(gpl);
14
}

Es zeigt eine animierte Sinuskurve an, und nach 10 Sekunden wird mit
pclose() sowohl die Pipe-Verbindung als auch das Fenster geschlossen.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.