Forum: PC-Programmierung GnuPlot - Vektoren zeichnen


von Tido G. (Firma: FH Osnabrück) (metro83)


Lesenswert?

Hallo Community,

ich bin neu hier und das aus dem unschönen Grund, weil ich ein Problem 
habe. Vielleicht könnt Ihr mir da ja helfen.

Ih habe ein Programm geschrieben, dass mir Daten in Dateien schreibt und 
mir diese dann in GnuPlot anzeigt.

Das funktioniert eigentlich auch ganz gut nur habe ich noch ein Problem:

Ich würde gerne Vektoren in Gnuplot zeichnen weiß aber nicht wie diese 
mit welcher Syntax in die Files geschrieben werden müssen.

Was ich bei den Koordiantenpunkte mache ist, dass ich die Daten einfach 
in eine Datei schreibe mit x und y Koordinaten und diese dann an GnuPlot 
übergebe.
Genau so würde ich es auch gerne mit den Vektoren machen nur finde ich 
die Syntax dazu nicht.

mit    set arrow 3 from 0,-5 to 0,5   soll man einen Pfeil malen können, 
allerdings will das bei mir nicht so recht funktionieren.


Momentan stehe ich etwas neben mir und bekomme es einfach nicht, weil es 
wahrscheinlich wieder eine Kleinigkeit ist.


Wäre für Tipps oder Vorschläge dankbar.


Mit freundlichen Grüßen
Tido

von Rüdiger K. (sleipnir)


Lesenswert?

"set arrow" funktioniert nur wenn Du schon ein Plot hast:
"gnuplot> plot sin(x)
gnuplot> set arrow 3 from 0,-1 to 2,0.5
gnuplot> replot"

Was Du suchst ist sicher so eine Darstellung:
http://www.columbia.edu/~sl2403/gnuplot/intro/style9.png
"Draw vectors. An arrow is plotted from (X,Y) to (X+dX,Y+dY). So that 
you need 4 columns data in your data file."

Also: Wenn Du eine Datei test.dat mit dem Inhalt
0 0 1 1
0 0 -1 1
hast wird Dir
1
plot "test.dat" with vector
die Vektoren plotten.

PS: Wenn Du mit LaTeX arbeitest oder überhaupt Formeln oder griechische 
Symbole verwendest kann ich Dir pyxplot empfehlen.
http://www.pyxplot.org.uk/gallery.shtml

Willst Du die Daten mit einem C/C++-artigen Programm generieren schau 
Dir auch mal Asymptote an!
http://asymptote.sourceforge.net/gallery/

von Tido G. (Firma: FH Osnabrück) (metro83)


Lesenswert?

Richtig erkennt und gleich die Lösungen geliefert.


Ich habe das gerade einmal durchgetestet und es funktioniert wirklich 
sehr gut. Hatte mich zuerst über die etwas mekrwürdige Darstellung der 
Vektoren gewundert dann aber doch gesehen, dass auch hier die dritte und 
vierte Koordinaten nicht das Ende des Vektors beschreiben sondern den 
gemalten Vektor an sich.
Stand ja auch in deinem Post nur halt noch nicht in meinem Programm.

Für die angegebenen Links bin ich ebenfalls sehr dankbar. Ich werde 
diese leider wegen des zeitlichen Mangels dieses Mal nicht mehr 
verwenden können, jedoch ist das mit Sicherheit etwas für die nächsten 
Programme und die lassen nie lange auf sich warten, denn man braucht 
immer kleine Helferlein.

Latex ist für mich im nächsten Semester ein Thema, da ich dann in meinem 
Praxissemester bin und mich dann damit auseinandersetzen wollte.
Vorrangig erst einmal um meinen Praxissemesterbericht zu erstellen und 
dann um mal zu schauen, welches Potenzial noch dahinter steckt.


Vielen Dank. Das hat mir wirklich weitergeholfen.

mit freundlichen Grüßen
Tido Groothoff

von Tido G. (Firma: FH Osnabrück) (metro83)


Lesenswert?

Hallo ich hätte da noch einmal eine Frage, weil mir auch nicht klar ist 
ob das überhaupt mit GnuPlot machbar ist.

Meine verwendeten Koordinatendateien enthalten Daten folgender Form:
1 3
1 6
4 5
3 3
7 3

ist es hier möglich, wenn ich an jede Zeile eine weiter Zahl anhänge, 
dass diese als Beschriftung für die geplotteten Datenpunkte verwendet 
werden kann.

1 3 1
1 6 2
4 5 3
3 3 4
7 3 5

Derzeit verwende ich für den Aufruf:
plot "c:/koordinatendatei.dat" with points lt -1 lw 12

Mit freundlichen Grüßen
Tido

von yalu (Gast)


Lesenswert?

So geht's:
1
plot "koordinatendatei.dat" with points lt -1, "" with labels offset 0,1

Nach labels dürfen neben offset weitere Optionen stehen, die im
Manual unter set label zu finden sind:

  http://www.gnuplot.info/docs/node193.html

Stehen die Labels nicht in der dritten Spalte der Datei, oder sollen sie
vor der Ausgabe umgeformt werden, kann dazu die /using/-Option verwendet
werden.

von Tido G. (Firma: FH Osnabrück) (metro83)


Angehängte Dateien:

Lesenswert?

Sehr gut auch das hat funktioniert. Muss leider gestehen, dass die Hilfe 
aus dem GnuPot für mich nicht immer eindeutig ist, jedoch klappt es nach 
mehrerem Probieren meistens doch.

Vielen Dank für die ausfühliche Hilfe.

Mit freundlichen Grüßen
Tido Groothoff

von Ole (Gast)


Lesenswert?

Moin Moin,
ich habe auch eine Frage zu der Darstellung von Vektoren in GnuPlot und 
wär euch dankbar wenn ihr mir helfen könntet. Ich habe die Aufgabe eine 
gewisse Anzahl von Punkten mit ihren Fehlervektoren darzustellen. Das 
Problem hierbei ist, dass die Vektoren sehr klein sind und eigentlich 
mit einem Skalar multipliziert werden müssten um sie überhaupt sehen zu 
können. In meiner Koordinaten Datei sind sie allerdings unskaliert 
gespeichert. Meine Frage ist also ob es möglich ist, beim Einlesen der 
Werte auch noch einen Faktor zum Skalieren zu übergeben.
Schonmal vielen Dank im Vorraus!

von Stefan Salewski (Gast)


Lesenswert?

>gewisse Anzahl von Punkten mit ihren Fehlervektoren darzustellen.

Ich kenne eher den Ausdruck Fehlerbalken -- wenn das gemeint ist:
Du kannst die Daten skalieren. Die Daten

stefan@AMD64-X2 ~ $ cat data.txt
0 0 0.1 -0.3
1 1 0.1 -0.3
2 4 0.1 -0.3
3 9 0.1 -0.3
4 16 0.1 -0.3
5 25 0.1 -0.3
6 36 0.1 -0.3
7 49 0.1 -0.3
8 64 0.1 -0.3
9 81 0.1 -0.3
10 100 0.1 -0.3

könnte man plotten mit

gnuplot> plot "data.txt" using 1:2:($2+10*$3):($2+10*$4) with errorbars

($3) ist der Fehlerwert von Spalte 3, ($3*10+2) das zehnfache plus 2.
Näheres siehe Dokumentation oder Gnuplot Mailingliste.

von yalu (Gast)


Lesenswert?

Möglicherweise möchte Ole ein Vektorfeld zeichnen lassen. Aber auch das
ist kein Problem, da auch dort mit der using-Option die dargestellten
Werte nach Belieben aus den Werten aus der Datei errechnet werden
können.

von Ole (Gast)


Lesenswert?

Ich habe in einem anderen Forum noch eine gute Lösung für mein Problem 
gefunden:

gnuplot> faktor = 5
gnuplot> plot "file.dat" using 1:2:($3*faktor):($4*faktor) with vector

Mit diesem Befehl kann also die Länge der Vektoren verändert werden.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.