Seite 1 von 5

[PSTricks,fileplot] Daten logarithmisch auftragen

Verfasst: Mi 9. Feb 2011, 11:42
von Klaus
Hi Leute,

ich hoffe dies hier ist das richtige Unterforum.

Ich habe es geschafft mir eine logarithmische Skala anzulegen, doch jetzt sollen die Daten auch mittels \fileplot eben logarithmisch aufgetragen werden.

Ist dies möglich? Denn ich habe den Eindruck das plotten der Daten ist erstmal vollkommen losgelöst von den Axen.

Viele Grüße,
Klaus.

Verfasst: Mi 9. Feb 2011, 14:18
von Klaus
Okay,

gemäß dem Motto 'STFW' habe ich eine Lösung gefunden
\psset{plotstyle=dots}
  \pstScalePoints(1,1){log}{}
  \rput[bl](1,1){%
  \readdata{\Data}{Data.dat}
  \listplot{\Data}
Jetzt habe ich nur das Problem, dass ich auch gerne die y-Achse logarithmieren würde, dabei manche meiner y-Werte allerdings Null sind.
Das liefert natürlich einen Fehler.

Kurioser Weise hat z.B. Gnuplot damit keine Probleme. Ich nehme an, das Program regelt das irgendwie 'intern' ?

Kann ich also auch pst-plot zum Laufen kriegen, obwohl manche Werte Null sind?

Viele Grüße,
Klaus.

Verfasst: Mi 9. Feb 2011, 15:02
von CrazyHorse
Klaus hat geschrieben: gemäß dem Motto 'STFW' habe ich eine Lösung gefunden
\psset{plotstyle=dots}
  \pstScalePoints(1,1){log}{}
  \rput[bl](1,1){%
  \readdata{\Data}{Data.dat}
  \listplot{\Data}
Jetzt habe ich nur das Problem, dass ich auch gerne die y-Achse logarithmieren würde, dabei manche meiner y-Werte allerdings Null sind.
Das liefert natürlich einen Fehler.

Kurioser Weise hat z.B. Gnuplot damit keine Probleme. Ich nehme an, das Program regelt das irgendwie 'intern' ?

Kann ich also auch pst-plot zum Laufen kriegen, obwohl manche Werte Null sind?
Es geht alles, wobei deine obige Lösung nicht gerade umwerfend ist ...
http://tug.org/PSTricks/main.cgi?file=p ... #logarithm
http://tug.org/PSTricks/main.cgi?file=p ... #logarithm

Herbert

Verfasst: Mi 9. Feb 2011, 15:13
von Klaus
CrazyHorse hat geschrieben: Es geht alles, wobei deine obige Lösung nicht gerade umwerfend ist ...
Dazu liefert STFW glaube ich auch keine Garantie. ;)
Die Beispiele sind interessant, doch scheint keines der Beispiele irgendwo einen Eintrag Null zu haben, woran der Logarithmus scheitern würde.

Viele Grüße,
Klaus.

Verfasst: Mi 9. Feb 2011, 16:22
von CrazyHorse
Klaus hat geschrieben:Die Beispiele sind interessant, doch scheint keines der Beispiele irgendwo einen Eintrag Null zu haben, woran der Logarithmus scheitern würde.
die Werte kannst du ja abfangen und mit einem entsprechenden y-Wert setzen oder löschen. Stell mal irgendwo einen Datensazt zur Verfügung.

Herbert

Verfasst: Do 10. Feb 2011, 09:29
von Klaus
CrazyHorse hat geschrieben: Stell mal irgendwo einen Datensazt zur Verfügung.
So sieht z.B. ein Datensatz aus.

Viele Grüße,
Klaus.

Verfasst: Do 10. Feb 2011, 10:54
von CrazyHorse
Klaus hat geschrieben:
CrazyHorse hat geschrieben: Stell mal irgendwo einen Datensazt zur Verfügung.
So sieht z.B. ein Datensatz aus.
und so mein Ergebnis, in der Hoffnung, dass es das ist, was du erwartest.
\documentclass{article}
\usepackage{pst-plot}

\begin{document}

\psset{unit=3}
\begin{pspicture}(0,-3)(3,1)
  \psaxes[logLines=all,subticks=5,xylogBase=10,Oy=-3](0,-3)(3,1)
  \pstScalePoints(1,1){ dup 0 eq { pop -1.e-30 }{ log } ifelse}
                      { dup 0 eq { pop -1.e-30 }{ log } ifelse}
  \readdata{\Data}{zz.dat}
  \listplot[plotstyle=dots]{\Data} 
\end{pspicture}

\end{document}  

Hebrert

Verfasst: Do 10. Feb 2011, 21:23
von Klaus
Hi,

das sieht schon sehr gut aus. :)

Jetzt bleibt mir noch die Frage was genau diese Zeile(n) tun?
\pstScalePoints(1,1){ dup 0 eq { pop -1.e-30 }{ log } ifelse}
{ dup 0 eq { pop -1.e-30 }{ log } ifelse}
\readdata{\Data}{zz.dat}
Ich habe es z.B. versucht mit der Erklärung zu pst-plot nachzuvollziehen, bin aber nicht ganz schlau daraus geworden. :-[

Ich vermute, dass es abfragt, ob ein Wert Null oder kleiner ist? Und falls ja, dann...?

Viele Grüße,
Klaus.

Verfasst: Do 10. Feb 2011, 22:12
von CrazyHorse
Klaus hat geschrieben: Jetzt bleibt mir noch die Frage was genau diese Zeile(n) tun?
\pstScalePoints(1,1){ dup 0 eq { pop -1.e-30 }{ log } ifelse}
{ dup 0 eq { pop -1.e-30 }{ log } ifelse}
\readdata{\Data}{zz.dat}
Ich habe es z.B. versucht mit der Erklärung zu pst-plot nachzuvollziehen, bin aber nicht ganz schlau daraus geworden. :-[
falls du mal einen HP-Taschenrechner bedienen musstest, dann hast du das Prinzip schon verstanden.
dup: kopiert das oberste Element (den x-Wert)
0 eq: vergleicht ihn mit 0 und legt true oder false auf den STack, womit
der eine x-Wert weg ist, deswegen vorher dup
{ pop -1.e-30} die VAriante für true, also x=0, dann löschen wir die zweite
Null mit pop (wegen dup) und legen den extrem großen negativen Wert
anstelle dessen auf den Stack, der eh nicht gezeichnet werden kann,
da er 3 km links vom Ursprung liegt :-) wobei ich gerade sehe, dass es ja -1.e30 sein muss, sonst liegt er ja bei Null.
{ log } ifelse anderenfalls, also x war nicht Null, machen wir das normale
und beenden die ifelse-Abfrage.

Das für y jetzt herzuleiten, überlasse ich dir :-)

Wenn man das ein bisschen geübt hat, ist es relatv leicht und effizient. Entspricht auch prinzipiell den Türmen von Hanoi, also wegnehmen, rauflegen usw.

Herbert

Verfasst: Sa 12. Feb 2011, 00:28
von Klaus
Danke,

dann will ich diesen Thread mal als 'beantwortet' bezeichnen. Obwohl ich nicht ausschließen möchte, dass weitere Fragen folgen. ;)

Gruß,
Klaus.