Forum: PC Hard- und Software Gnuplot: Einheitskreis zeichnen


von Tobias P. (hubertus)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich möchte den Betrag einer z-Übertragungsfunktion in der komplexen 
Ebene darstellen. Dazu habe ich in Matlab meine Übertragungsfunktion 
definiert und diese dann im Bereich von x=-1..1 und y=-1..1 evaluiert, 
in dem ich für
z jeweils x+j*y eingesetzt habe. Anschliessend plotte ich den Betrag der 
Übertragungsfunktion mit pcolor. Das geht wunderbar in Matlab, nun 
möchte ich das Diagramm aber auch sinnvoll in LaTeX einbinden können. 
Für meine LaTeX-Dokumente verwende ich jeweils Gnuplot. Also habe ich 
nun die Daten aus Matlab exportiert (Datei z.txt stellt für jeden Punkt 
der komplexen Ebene den Betrag der Übertragungsfunktion dar) und zeichne 
das in LaTeX mit Gnuplot wie folgt:
1
set grid
2
set format x "$%g$"
3
set format y "$%g$"
4
5
set xlabel "$\\Re z$"
6
set ylabel "$\\Im z$"
7
8
set tics out
9
  
10
11
set cbtics format "$%g$"
12
set palette rgb 34,35,36;
13
  
14
set xrange [-1.1:1.1]
15
set yrange [-1.1:1.1]
16
set grid
17
set size square
18
  
19
20
set object 1 circle at 0,0 size 1
21
22
plot 'z.txt' u ($1*5.4863e-003-1.1):($2*5.4863e-003-1.1):3 matrix with image notitle

Das sieht schon wie gewünscht aus, allerdings möchte ich in dem Bild 
noch den Einheitskreis einzeichnen, damit man erkennt, dass die Pole 
wirklich alle innerhalb des Einheitskreises liegen. Wie ihr seht, habe 
ich versucht den Kreis zu zeichnen mit der zweitletzten Anweisung. Aber, 
man erkennt nichts! Ich denke das Problem liegt darin, dass der 
gezeichnete Kreis irgendwie "unter" dem farbigen Graphen liegt. Hat 
einer eine Idee, wie man das "Problem" beheben könnte, sodass der 
Einheitskreis als dünne schwarze Linie sichtbar wird?

Gruss Tobias

von SAlewski, Stefan (Gast)


Lesenswert?

Tobias Plüss schrieb:
> Ich denke das Problem liegt darin, dass der
> gezeichnete Kreis irgendwie "unter" dem farbigen Graphen liegt.

Ja und warum probierst Du nicht mal nur den Kreis zu zeichnen, also ohne 
den Rest?

Wenn das Erfolg hat, vielleicht die set Object Anweisung weiter nach 
unten schieben, also nach plot?
Eventuell braucht set object circle aber auch weitere Parameter. Und 
sonst kann man Kreise natürlich auch als Kurven zeichnen, set parametric 
und dann mit sin(), cos() -- findet man mit Google.

Ich habe gnuplot derzeit nicht installiert und kann Dir momentan nicht 
helfen -- Yalu wahrscheinlich schon eher, mal sehen ob er sich meldet.

von Tobias P. (hubertus)


Angehängte Dateien:

Lesenswert?

Hallo,

jaaa stimmt, auf die Idee mit parametric bin ich nicht gekommen.
So geht es!
1
  set xlabel "$\\Re z$"
2
  set ylabel "$\\Im z$"
3
  set zlabel "$\\abs{ G(z) }$"
4
  
5
  range = 1.3
6
  numpnts = 401
7
  
8
  set parametric
9
  set trange [0:2*pi]
10
  fx(t) = cos(t)
11
  fy(t) = sin(t)
12
  set table 'table.tmp'
13
  set samples 100,100
14
  plot fx(t),fy(t)
15
  unset table
16
  unset parametric
17
  
18
  set palette @JET
19
20
  @FORMAT_TEX
21
  @SQUARE
22
  set xrange [-range:range]
23
  set yrange [-range:range]
24
  plot 'daten/z.txt' u ($1*range/numpnts*2-range):($2*range/numpnts*2-range):3 matrix with image notitle, \
25
  'table.tmp' using 1:2 with lines lw 0.5 lc rgb"black" notitle,\
26
  'daten/zeros.txt' using 1:2 with points pt 6 lc rgb"red" title 'Nullstellen', \
27
  'daten/poles.txt' using 1:2 with points pt 2 title 'Pole'

von Yalu X. (yalu) (Moderator)


Lesenswert?

1
set object

geht schon, man muss aber angeben, dass das Objekt in den Vordergrund
gezeichnet werden soll:
1
set object 1 circle front at 0,0 size 1 fillcolor rgbcolor "black"

Die fillcolor-Option habe ich zusätzlich angegeben, da sonst der Kreis
aus mir unverständlichen Gründen weiß gefüllt wird.

von Tobias P. (hubertus)


Lesenswert?

Hallo Yalu,
kriegst du es auch noch hin, dass das Raster sichtbar wird? set grid 
genügt offenbar nicht ;-)
danke übrigens für den input. Ist so doch etwas bequemer als meine 
Lösung!

Gruss

von Salewski, Stefan (Gast)


Lesenswert?

Hast Du denn "set grid front" probiert?

http://gnuplot.sourceforge.net/docs_4.2/node188.html

von Yalu X. (yalu) (Moderator)


Lesenswert?

Salewski, Stefan schrieb:
> Hast Du denn "set grid front" probiert?

Der Versuch könnte durchaus erfolgreich sein ;-)

von Tobias P. (hubertus)


Angehängte Dateien:

Lesenswert?

Jawoll, der Versuch war's wert ;-)
Damit und noch mit einer etwas klügeren Colormap kriege ich ein ganz 
anständiges Diagramm.

Danke & Gruss!

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.