[PSTricks,fileplot] Daten logarithmisch auftragen

Tabellen und Grafiken erstellen und anordnen


Klaus
Forum-Century
Forum-Century
Beiträge: 184
Registriert: Do 27. Jan 2011, 19:30

Beitrag von Klaus »

Hi,

ich muss das Thema leider nochmal öffnen.

Ich habe deinen Quellcode direkt kopiert und musste noch
\usepackage{pstricks-add}
nachtragen, sonst gab er mir einen Kompilerfehler, dass Kommandos wie 'logLines' nicht bekannt sind.

Bei mir sind die Daten auch nach links außerhalb der Achsen verschoben, siehe Anhang.

Viele Grüße,
Klaus.

Edit:
Quellcode eingefügt und Datensatz angehängt.
Dateianhänge
average-energy-time_5.txt
(37.11 KiB) 424-mal heruntergeladen
mb.pdf
(11.9 KiB) 430-mal heruntergeladen

CrazyHorse
Forum-Guru
Forum-Guru
Beiträge: 252
Registriert: Di 16. Mär 2010, 09:39

Beitrag von CrazyHorse »

Klaus hat geschrieben: ich muss das Thema leider nochmal öffnen.

Ich habe deinen Quellcode direkt kopiert und musste noch
\usepackage{pstricks-add}
nachtragen, sonst gab er mir einen Kompilerfehler, dass Kommandos wie 'logLines' nicht bekannt sind.
dann hast du kein aktuelles System. Wie auch immer,deine x-Werte sind
ja auch kleienr als 1, also musst du die x-Achse anders wählen. Das geht:
\documentclass{article}
\usepackage{pst-plot}

\begin{document}
\psset{unit=3}
\begin{pspicture}(-1,-3)(2,1)
  \psaxes[logLines=all,subticks=5,xylogBase=10,Oy=-3,Ox=-1](-1,-3)(2,1)
  \pstScalePoints(1,1){ dup 0 eq { pop -1.e30 }{ log } ifelse}
                      { dup 0 eq { pop -1.e30 }{ log } ifelse}
  \readdata{\Data}{average-energy-time_5.txt}
  \listplot[plotstyle=dots]{\Data}
\end{pspicture}

\end{document}
Herbert

Klaus
Forum-Century
Forum-Century
Beiträge: 184
Registriert: Do 27. Jan 2011, 19:30

Beitrag von Klaus »

Wie auch immer,deine x-Werte sind ja auch kleiner als 1, also musst du die x-Achse anders wählen. Das geht:
\documentclass{article}
\usepackage{pst-plot}

\begin{document}
\psset{unit=3}
\begin{pspicture}(-1,-3)(2,1)
  \psaxes[logLines=all,subticks=5,xylogBase=10,Oy=-3,Ox=-1](-1,-3)(2,1)
  \pstScalePoints(1,1){ dup 0 eq { pop -1.e30 }{ log } ifelse}
                      { dup 0 eq { pop -1.e30 }{ log } ifelse}
  \readdata{\Data}{average-energy-time_5.txt}
  \listplot[plotstyle=dots]{\Data}
\end{pspicture}

\end{document}
Ich glaube ganz langsam verstehe ich.
Also die Begrenzung der Achsen \psaxes[..](x1,y1)(x2,y2) beschreibt bei logLines nicht mehr die numerischen Werte, sondern die Potenzen, ja?
Aus dem Grund sollte auch bei den Optionen Ox und Oy mit x1 und y1 übereinstimmen?

Was ich jetzt nicht ganz verstehe, wieso die pspicture - Umgebung auch auf die Koordinaten angepasst wird.
Zunächst sind es doch Koordinaten bei \begin{pspicture}(xMin,yMin)(xMax,yMax), doch auf der anderen Seite auch die Anzahl an 'Einheiten' bzw. 'units'.

Denn was ich ganz gerne mache, ist mir erstmal eine pspicture Umgebung zu schaffen und mir dann mittels \psgrid ein Koordinatensystem hineinzulegen, dass ich weiß wo meine Objekte zu plazieren sind. Für eine breite DINA4 Seite z.B.
\begin{pspicture}{0,0)(11,6)
 \psgrid[griddots=5,subgriddiv=0]
\end{pspicture}
Und wenn ich den Graphen hineinlegen möchte, dann setze ich bei (1,1) das Objekt an:
\begin{pspicture}{0,0)(11,6)
 \psgrid[griddots=5,subgriddiv=0]
 \rput[lb](1,1){%
 %Inhalt
 }
\end{pspicture}
Doch das knallt dann mit den Achsen von
\psaxes[logLines=all,subticks=5,xylogBase=10,Oy=-3,Ox=-1](-1,-3)(2,1) 
:shock:

Gruß,
Klaus.

CrazyHorse
Forum-Guru
Forum-Guru
Beiträge: 252
Registriert: Di 16. Mär 2010, 09:39

Beitrag von CrazyHorse »

Klaus hat geschrieben::
Ich glaube ganz langsam verstehe ich.
Also die Begrenzung der Achsen \psaxes[..](x1,y1)(x2,y2) beschreibt bei logLines nicht mehr die numerischen Werte, sondern die Potenzen, ja?
Aus dem Grund sollte auch bei den Optionen Ox und Oy mit x1 und y1 übereinstimmen?
genau, die Werte werden einfach zu Exponenten.
Was ich jetzt nicht ganz verstehe, wieso die pspicture - Umgebung auch auf die Koordinaten angepasst wird.
Zunächst sind es doch Koordinaten bei \begin{pspicture}(xMin,yMin)(xMax,yMax), doch auf der anderen Seite auch die Anzahl an 'Einheiten' bzw. 'units'.
Die pspicture-Umgebung reserviert den Platz für TeX und legt den
Ursprung für PostScript fest und in diesem Fall bezieht er sich auf die Exponenten.

Denn was ich ganz gerne mache, ist mir erstmal eine pspicture Umgebung zu schaffen und mir dann mittels \psgrid ein Koordinatensystem hineinzulegen, dass ich weiß wo meine Objekte zu plazieren sind. Für eine breite DINA4 Seite z.B.
\begin{pspicture}{0,0)(11,6)
 \psgrid[griddots=5,subgriddiv=0]
\end{pspicture}
Und wenn ich den Graphen hineinlegen möchte, dann setze ich bei (1,1) das Objekt an:
\begin{pspicture}{0,0)(11,6)
 \psgrid[griddots=5,subgriddiv=0]
 \rput[lb](1,1){%
 %Inhalt
 }
\end{pspicture}
Doch das knallt dann mit den Achsen von
\psaxes[logLines=all,subticks=5,xylogBase=10,Oy=-3,Ox=-1](-1,-3)(2,1) 
wozu soll den eine lienare Einteilung bei logarithmischen Werten gut sein? Mit \psaxes und den möglichen Optionen kann man viel besser und vielfältiger Koordinatenlinien zeichnen als mit \psgrid

Herbert

Klaus
Forum-Century
Forum-Century
Beiträge: 184
Registriert: Do 27. Jan 2011, 19:30

Beitrag von Klaus »

CrazyHorse hat geschrieben: wozu soll den eine lienare Einteilung bei logarithmischen Werten gut sein?
Da gebe ich dir spontan recht.

Ich hatte damit begonnen mir für Vorträge ein eigenes Foliendesign anhand der super Bücher über Präsentationen und PSTricks zu basteln.

Bisher lege ich mir eben in jede neu begonnene Folie ein pspicture Umgebung und ein \psgrid. Dann gebe ich einfach die Koordinaten an, wo eine Formel stehen soll, ein Schlagwort oder eben eine Graphik.

Aus dem Zusammenhang eben noch dieser Thread, sodass ich separat Graphiken oder Formeln hineinsetzen kann.

Bisher fahre ich damit auch ganz gut, doch wenn die pspicture Umgebung eine log. skalierte Graphik enthalten soll, dann muss ich mir wohl etwas anderes ausdenken.

Ach ja,
noch eine Frage zur Graphik:
Wenn ich anstatt Punkte durchgezogenen Linien haben möchte:
\listplot[plotstyle=line]{\Data} 
dann ist das Koordinatensystem leer? :shock:

Viele Grüße,
Klaus.

CrazyHorse
Forum-Guru
Forum-Guru
Beiträge: 252
Registriert: Di 16. Mär 2010, 09:39

Beitrag von CrazyHorse »

Klaus hat geschrieben:Ach ja,
noch eine Frage zur Graphik:
Wenn ich anstatt Punkte durchgezogenen Linien haben möchte:
\listplot[plotstyle=line]{\Data} 
dann ist das Koordinatensystem leer?
bei mir nicht. ABer es ist ohnehin sinnlos, weil du ja zwischendurch immer
Punkte ahst, die auf Null liegen, da kommt sowieso kein durchgezogener
Kurvenverlauf heraus.

Herbert

Klaus
Forum-Century
Forum-Century
Beiträge: 184
Registriert: Do 27. Jan 2011, 19:30

Beitrag von Klaus »

Hm,

da alles logarithmiert ist, muss ich wohl umdenken.

D.h. wenn ich einen Punkt x mit 2 multiplizieren möchte, dann wäre das bei Logarithmierung die Addition:
log(x*2) = log(x) + log(2)
Muss ich das dann nach pstScalePoints in der geschweiften Klammer addieren? {add ... }

Ich probier es mal aus, doch wahrscheinlich wird der genaue Syntax erstmal schief gehen. ;)

Konkrete Hilfe ist dennoch willkommen bevor das ein 'Rumgestocher' wird. ;)

Viele Grüße,
Klaus.
Dateianhänge
mb.pdf
(13.98 KiB) 659-mal heruntergeladen
average-energy-time_5.txt
(37.11 KiB) 413-mal heruntergeladen

CrazyHorse
Forum-Guru
Forum-Guru
Beiträge: 252
Registriert: Di 16. Mär 2010, 09:39

Beitrag von CrazyHorse »

Klaus hat geschrieben: da alles logarithmiert ist, muss ich wohl umdenken.

D.h. wenn ich einen Punkt x mit 2 multiplizieren möchte, dann wäre das bei Logarithmierung die Addition:
log(x*2) = log(x) + log(2)
Muss ich das dann nach pstScalePoints in der geschweiften Klammer addieren? {add ... }
du musst beschreiben, was du genau machen willst: Also den originalen x-Wert mit 2 multiplizieren, bevor er logarithmiert wird?

\pstScalePoint wertet _erst_ den PostScript-Teil aus, danach wird mit den
ersten beiden Werten multipliziert. Du hast also 2*log(x) aufgetragen. Also nicht log(x*2)! Das erhälst du mit

\pstScalePoints(1,1){ dup 0 eq { pop -1.e30 }{2 mul log } ifelse}
{ dup 0 eq { pop -1.e30 }{ log } ifelse}

Herbert

Klaus
Forum-Century
Forum-Century
Beiträge: 184
Registriert: Do 27. Jan 2011, 19:30

Beitrag von Klaus »

CrazyHorse hat geschrieben: du musst beschreiben, was du genau machen willst: Also den originalen x-Wert mit 2 multiplizieren, bevor er logarithmiert wird?
Nich direkt. Ich möchte einfach den Graphen skalieren können.

Wenn ich z.B. einen linearen Graphen plotten möchte, so kriege ich dies bisher hin:
\begin{pspicture}(10,5)
\psaxes[xunit=0.1cm,yunit=0.01]{->}(0,0)(100,500)
\pstScalePoints(0.1,0.001){}{}
% Daten plotten
\end{pspicture}
Damit hätte ich z.B. eine x-Achse bis 100 und eine y-Ache bis 500 aufgetragen und durch die Optionen von \psaxes dafür gesorgt, dass sie in meiner pspicture - Umgebung bleiben.
Jetzt verstehe ich Latex aber so, dass die Achsenskalierung erstmal nichts mit den Datenpunkten zu tun hat. Denn für diese gelten die Koordinaten der pspicture - Umgebung. D.h. wenn ich jetzt y-Werte bis 500 hätte dann würden sie mir bisher weit aus meiner pspicture Umgebung nach oben 'herauslaufen'.
Das heißt ich muss auch dem Datensatz klar machen die Daten zu skalieren. Dies tue ich mit \pstScalePoints, indem ich die Skalierungsfaktoren 0.1 und 0.001 für die x bzw. y-Achse auch auf den Datensatz übertrage!

Und genau dies möchte ich auch auch für die log-log-Auftragung ermöglichen. Einfach meine Achsen und damit Datensätzen dem Platz anpassen, der mir zur Verfügung steht.

Denn wenn ich z.B. DINA4 habe, dann habe ich mehr Platz nach oben als zur 'Seite'. Wenn ich jetzt an meinen Vortrag denke, dann habe ich eine DINA4 Seite quer und muss meine Skalierung wieder anders wählen. Und wenn ich nun z.B. um meine Graphen herum auf meinen Folien noch Formeln oder Symbole anbringen möchte, dann muss ich wieder anders skalieren.

Ich möchte einfach nur in der Lage sein zu skalieren in der log oder gar log-log Auftragung. :)

Viele Grüße,
Klaus.

CrazyHorse
Forum-Guru
Forum-Guru
Beiträge: 252
Registriert: Di 16. Mär 2010, 09:39

Beitrag von CrazyHorse »

Klaus hat geschrieben:
CrazyHorse hat geschrieben: Denn wenn ich z.B. DINA4 habe, dann habe ich mehr Platz nach oben als zur 'Seite'. Wenn ich jetzt an meinen Vortrag denke, dann habe ich eine DINA4 Seite quer und muss meine Skalierung wieder anders wählen. Und wenn ich nun z.B. um meine Graphen herum auf meinen Folien noch Formeln oder Symbole anbringen möchte, dann muss ich wieder anders skalieren.

Ich möchte einfach nur in der Lage sein zu skalieren in der log oder gar log-log Auftragung. :)
du willst also einfach denselben Graphen beispielsweise auf 5x5 udn ein andermal auf 30x15cm auftragen, mit denselben Werten, richtig?

Herbert

Antworten