PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : pst-plot3d: IIIDticks und Ursprung verschieben



Christian123
24-11-2009, 11:36
Ich möchte Daten in 3D-Plots mittels pst-plot3D und \fileplotThreeD ausgeben.

Zum einen würde ich gerne wissen, ob es möglich ist den Koordinatenursprung zu verschieben, daß er also nicht bei (0,0,0) liegt, sondern z.B. bei (0,10,0). Wenn man yMin auf 10 setzt, fängt zwar die y-Achse bei 10 an, aber x- und z-Achse schneiden immer noch bei y=0.
Mit 0x,0y,0z funktioniert es auch nicht.

Zum anderen funktionieren die IIIDticks bei mir nicht. Es gibt eine Fehlermeldung:

Runaway definition?
->/ArrowA { moveto } def /ArrowB { } def /ArrowInside { } def 1.0 SL\ETC
Tex capacity exceeded, sorry [main memory size=1500000]
\pst@code ...ef 1 1 2 /zLight ED /yLight ED /xLight ED 1 setlinejoin /dxUni...


Möglicherweise gibt es zu viele Punkte in meinem 3D-Datensatz, weil meine z-Daten bis 7000 gehen und ich das über die zThreeDunit herunterskaliere. Die Beispiele aus der pst-3dplot-doc.pdf mit IIIDticks funktionieren nämlich. Hier ein Minimalbeispiel:



\documentclass{article}
\usepackage{pstricks,pst-3dplot,pst-pdf}
\begin{document}
\begin{pspicture}(-16,-16)(16,12)
\psset{Alpha=45,Beta=30}
\psset{xThreeDunit=0.1,yThreeDunit=0.8,zThreeDunit =0.00142857}
\pstThreeDCoor[linewidth=1pt,linecolor=black,
xMin=-1,xMax=105,yMin=10,yMax=26,zMin=0,zMax=7000,
nameX=\huge$t$,nameY=\huge$\tau_1$,nameZ=\huge$S$,
IIIDticks,IIIDlabels,
Dx=10,Dy=1,Dz=1000]
\end{pspicture}
\end{document}

voss
24-11-2009, 14:31
Ich möchte Daten in 3D-Plots mittels pst-plot3D und \fileplotThreeD ausgeben.

Zum einen würde ich gerne wissen, ob es möglich ist den Koordinatenursprung zu verschieben, daß er also nicht bei (0,0,0) liegt, sondern z.B. bei (0,10,0). Wenn man yMin auf 10 setzt, fängt zwar die y-Achse bei 10 an, aber x- und z-Achse schneiden immer noch bei y=0.
Mit 0x,0y,0z funktioniert es auch nicht.


Da muss ich etwas nachdenken, sollte aber möglich sein.

Herbert

voss
24-11-2009, 21:13
Möglicherweise gibt es zu viele Punkte in meinem 3D-Datensatz, weil meine z-Daten bis 7000 gehen und ich das über die zThreeDunit herunterskaliere. Die Beispiele aus der pst-3dplot-doc.pdf mit IIIDticks funktionieren nämlich. Hier ein Minimalbeispiel:


Da die Label wegen der Schrift auf TeX-Ebene gesetzt werden, gibt es
Probleme mit den großen z-Einheiten. Du kannst aber alternativ ein
zlabelFactor definieren, der dann die Zehnerpotenz mit ausgibt.
Mit dem pst-3dplot von
http://comedy.dante.de/~herbert/PSTricks-TDS/tex/generic/pst-3dplot/
läuft das untere Beispiel. Den Offset kannst jetzt mit IIIDOffset={x,y,z}
setzen.

Herbert


\documentclass{article}
\usepackage{pstricks,pst-3dplot,pst-pdf}
\begin{document}
\begin{pspicture}(-16,-16)(16,12)
\psset{Alpha=45,Beta=30,IIIDOffset={0,10,0}}
\psset{xThreeDunit=0.1,yThreeDunit=0.8,zThreeDunit =1.42857,
deltax=10,deltay=2,deltaz=1,planecorr=xy}
\pstThreeDCoor[linewidth=1pt,linecolor=black,
xMin=-15,xMax=100,
yMin=10,yMax=26,
zMin=0,zMax=7,
Dx=10,Dy=2,Dz=1,
zlabelFactor=$\cdot10^3$,
nameX=\huge$t$,nameY=\huge$\tau_1$,
nameZ=\huge$S$,
IIIDticks,IIIDlabels,
]
\end{pspicture}
\end{document}

Christian123
25-11-2009, 10:39
Erst einmal: Vielen Dank!
Das Verschieben des Koordinatenursprungs klappt jetzt sehr gut.

Nur mit den Ticks und Labels scheint es noch ein Problem zu geben. Ich bekomme beim Kompilieren den Fehler


Undefined control sequence.
\pstThreeDCoor@i ...ance \pst@cntx by -1
\pstFPadd \pst@tempC \pst@OffsetX {\...

Ich habe ein bißchen rumprobiert und bekomme es nur zum Laufen, wenn ich die IIIDticks auskommentiere (die IIIDlabels sind dann zwar im Code drin werden aber auch nicht angezeigt).
Was macht in diesem Zusammenhang der Parameter deltax? Der kommt in den beanstandeten Zeilen in pst-3dplot.tex vor....

voss
25-11-2009, 10:46
Nur mit den Ticks und Labels scheint es noch ein Problem zu geben. Ich bekomme beim Kompilieren den Fehler

Ich habe ein bißchen rumprobiert und bekomme es nur zum Laufen, wenn ich die IIIDticks auskommentiere (die IIIDlabels sind dann zwar im Code drin werden aber auch nicht angezeigt).
Was macht in diesem Zusammenhang der Parameter deltax? Der kommt in den beanstandeten Zeilen in pst-3dplot.tex vor....

ah , da habe ich geschlafen ... Sorry.
Du musst auch das PAket pst-fp ersetzen:
http://comedy.dante.de/~herbert/PSTricks-TDS/tex/generic/pstricks-add/

deltax ist die Schrittweite der Ticks und DX die Schrittweite der LAbelwerte.
Die Doku wird irgendwann nochmal aktualisiert.

Herbert

Christian123
25-11-2009, 15:31
Ja, so klappt es jetzt auch mit dem IIIDticks, vielen Dank!

Beim Einfügen meiner Daten über \fileplotThreeD tritt nun leider noch ein Effekt auf, den ich mir nicht so ganz erklären kann. Die Plots wirken in der Schrägansicht (alpha=20,beta=-50) leicht verschoben (http://img213.imageshack.us/img213/9403/plot3dalpha20beta50.png). In der Draufsicht (alpha=20,beta=-90) scheint alles OK zu sein (http://img522.imageshack.us/img522/7158/plot3dalpha20beta90.png).

Muß man bei \fileplotThreeD evtl. noch irgendetwas beachten?
Oder ist das nur eine perspektivische Verzerrung?
Weil z.B. der letzte, rote Plot sollte eigentlich hinter tau1=24 liegen.

voss
25-11-2009, 15:48
Beim Einfügen meiner Daten über \fileplotThreeD tritt nun leider noch ein Effekt auf, den ich mir nicht so ganz erklären kann. Die Plots wirken in der Schrägansicht (alpha=20,beta=-50) leicht verschoben (http://img213.imageshack.us/img213/9403/plot3dalpha20beta50.png). In der Draufsicht (alpha=20,beta=-90) scheint alles OK zu sein (http://img522.imageshack.us/img522/7158/plot3dalpha20beta90.png).

Muß man bei \fileplotThreeD evtl. noch irgendetwas beachten?
Oder ist das nur eine perspektivische Verzerrung?
Weil z.B. der letzte, rote Plot sollte eigentlich hinter tau1=24 liegen.

wenn, dann habe ich höchstens ein Leerzeichen "reingeschmuggelt" ...
(fehlendes % amd Zeilenende). Ich schau mal.

Herbert

voss
25-11-2009, 17:08
Ja, so klappt es jetzt auch mit dem IIIDticks, vielen Dank!

Beim Einfügen meiner Daten über \fileplotThreeD tritt nun leider noch ein Effekt auf, den ich mir nicht so ganz erklären kann. Die Plots wirken in der Schrägansicht (alpha=20,beta=-50) leicht verschoben (http://img213.imageshack.us/img213/9403/plot3dalpha20beta50.png). In der Draufsicht (alpha=20,beta=-90) scheint alles OK zu sein (http://img522.imageshack.us/img522/7158/plot3dalpha20beta90.png).

Muß man bei \fileplotThreeD evtl. noch irgendetwas beachten?
Oder ist das nur eine perspektivische Verzerrung?
Weil z.B. der letzte, rote Plot sollte eigentlich hinter tau1=24 liegen.

bei mir ist nichts besonderes zu sehen. Du kannst einen Test machen und
\pstThreeDCoor[drawing=false,.. aufrufen, dann sollte der Plot genauso
aussehen wie sonst.

Herbert

Christian123
03-12-2009, 12:43
Mit \pstThreeDCoor[drawing=false,...] sehen die Plots der Daten genauso aus nur ohne das Achsenkreuz.
Ich habe jetzt hier nochmal einen Plot aus Matlab, wie es eigentlich aussehen soll (http://img694.imageshack.us/img694/530/plot3dziel.png). Mein Stand derzeit sieht so aus: http://img694.imageshack.us/img694/6311/plot3dalpha35beta36.png.
Wenn man sonst alles gleich läßt und nur beta auf 90 setzt für die Draufsicht (http://img694.imageshack.us/img694/1134/plot3dalpha35beta90.png), dann sieht man, daß die Daten schon richtig geplottet werden, etwa die hinterste Linie genau bei tau1=12 ms und nur für t>0 ms. In der Schrägsicht sieht es aber so aus, als würde die hinterste Linie bei tau1=18 ms verlaufen und auch bei t<0 ms.
Da muß irgendwie eine perspektivische "Verzerrung" drin sein.
Unten habe ich mal ein Minimalbeispiel (und ein Datenfile, 32KB, http://www.4shared.com/file/164649613/2bf08fd9/tau1_120.html, auf Download Now klicken).

Und noch ein paar Fragen, vielleicht auch als Feedback:

- Für ein bestimmtes xmax (ymax,zmax) werden die Achsen bei mir in der entsprechenden Länge gezeichnet, aber das letzte mögliche Label wird nicht mehr angezeigt (der entsprechende Tick-Strich auch nicht). Bsp.: Dy = 2, ymax = 27.9 ---> y = 24 ist das letzte angezeigte Label (y=26 müßte aber noch angezeigt werden), ymax = 28.1 --> y = 26 ist das letzte angezeigte label (y=28 müßte eigentlich noch angezeigt werden). evtl. läuft da eine for-Schleife nicht weit genug?

- Wenn xmin/xmax und Dx wie bei mir ganzzahlig sind, wäre es möglich, das Label auch als Integer anzuzeigen? Also ohne das .0 am Ende meine ich. Dann könnte ich nämlich z.B. auch die zLabels von 0 bis 7 laufen lassen (und nicht von 0.0 bis 7.0) und über den zLabelFactor einfach drei Nullen für die Tausender anfügen.

- Die labels sind oberhalb bzw. rechts von den tick-Strichen. Ginge es irgendwie, daß die Labels zentriert zu den tick-Strichen stehen? So ähnlich wie man bei \rput die Position der Boxen angeben kann.





\documentclass{article}
\usepackage{pstricks,pst-3dplot,pst-pdf}
\begin{document}
\begin{pspicture}(-20,-14)(-2,7)
\psset{Alpha=-35,Beta=36,IIIDOffset={0,10,0}}
\psset{xThreeDunit=0.1,yThreeDunit=0.8,zThreeDunit =1.42857,
deltax=20,deltay=2,deltaz=1,planecorr=xz}
\psset{IIIDxTicksPlane=xy,IIIDyTicksPlane=xy,IIIDz TicksPlane=xz}
\psset{IIIDxticksep=-0.4,IIIDyticksep=-1.8,IIIDzticksep=-0.4}
\pstThreeDCoor[drawing=true,linewidth=1pt,linecolor=black,
xMin=0,xMax=119.9,
yMin=10,yMax=27.9,
zMin=0,zMax=8.1,
Dx=20,Dy=2,Dz=1,
zlabelFactor=$00$,
planecorr=xzrot,
nameX=\huge{$t$ [ms]},nameY=\huge{$ \tau_1$ [ms]},
nameZ=\huge$S$,
IIIDticks,
IIIDlabels
]
\fileplotThreeD[linewidth=1pt,linecolor=blue]{tau1_12.0.txt}
\end{pspicture}
\end{document}

krihaa
03-12-2009, 13:12
Hi,

ich würd mal sagen, dass die Kurven einfach nach unten in Richtung S-Achse verschoben sind. Siehe dazu auch die Werte in dem txt-file, das du bereit gestellt hast. 3. Komponente geht von -3.03 bis 2.35. Müsste auch sehr gut sichtbar sein, wenn du beta mal auf 0 setzt.

Gruß
Kristian

Christian123
03-12-2009, 13:18
Vielen Dank für den Hinweis.
Das war ein echt blöder Fehler meinerseits.
Hatte da bei der Erstellung der Datenfiles vergessen einen Korrekturfaktor im Code zu entfernen. Manchmal sehen vier Augen einfach mehr als zwei....

mmbrother
22-07-2010, 22:28
Hallo,

ich bin ein Newbie in Matlab und bin auf der Suche nach MATLAB Experten die mir vielleicht weiterhelfen könnten.:cool:

Ich habe eine Excel-Liste (Anbei), mit einer sehr hohen Anzahl von Messpunkten, 4 Spalten (Zeit, weg1,weg2,weg3,weg4).
Die .xls-Datei habe ich in Matlab eingelesen. Jetzt würde ich ein ähnliches Diagramm ,wie am Anfang dieses Threads zu sehen, erstellen.
Und nun folgendes:

Ich möchte die Z-Achse als Weg [in mm] bezeichnen und die X-Achse soll die Zeit t in sec die y -Achse soll die verschiedenen Weg-Messreihen zeigen. Ich habe 4Wegmessungen, also Weg 1 Weg 2 Weg 3 usw....

http://www.fotos-hochladen.net/weg2e6w7a3y.png

Nach zahlreicher Suche in der Matlab Hilfe habe ich den BefehlCode ribbon gefunden.


Habe mit dem Befehl ribbon folgendes erstellt.


ribbon(t,x1,0.1)
colormap hsv

http://www.fotos-hochladen.net/verlaufmnig1vj2.png

Wie kann oder muss ich den Code schreiben, sodass ich die Messreihen nebeneinander habe?
Geht das vielleicht einfacher? Bin ich auf der richtigen Spur?
Die Breite von der Kurve kann ich ja mit der 3 variable (in dem Fall 0,1)
ändern, jedoch ist das immer noch zu Breit. Liegt das vielleicht daran, dass ich nur einen Verlauf habe?