PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bei pdfplot 3D- Grafik fehlt ein Stück



msthab
06-10-2017, 07:23
Hallo,

ich möchte gerne die Funktion -1/r (in 3D Polarkoordinaten) darstellen.
In Anlehnung an dem Beispiel auf Seite 141 im PGFPLOT Manual habe ich dazu unten stehen Code geschrieben (Umwandlung x,y im Polarkoordinaten usw).
Die Grafik wird auch fast richtig dargestellt, aber es fehlt ein Stück (siehe jpg-Files)
Bei der Fehlersuche ist mir aufgefallen, dass dies auch bei anderen Funktionen, die im negativen z-Bereich liegen passiert (z.B. f(r)=-r). Bei positiven Funktionen tritt der Fehler nicht auf. Hat jemand eine Erklärung?

Vielen Dank!



\documentclass[10pt,ngerman,a4paper]{article}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[a4paper]{geometry}
\geometry{verbose,tmargin=2cm,bmargin=3cm,lmargin= 2cm,rmargin=2cm,footskip=1cm}
\setlength{\parskip}{\smallskipamount}
\setlength{\parindent}{0pt}
\usepackage{units}



%--------------------------------------------------------------------------------------------------------------

\usepackage{pgfplots}
\pgfplotsset{compat=1.15} % komptibilitätseinstellung
\usepackage{lmodern} % Notwendig fuer gute Schriften (nicht verpixelt)

%------------------------------------------------------------------------------------

\begin{document}

\begin{tikzpicture}
\begin{axis}[
% clip=true,
width=20cm,
height=20cm,
xtick=\empty,
ytick=\empty,
ztick=\empty,
% xlabel={$x$}, ylabel={$y$}, zlabel={$E_{\mathrm{pot}}$},
axis lines=center,
axis on top,
% xmin=-1.8, xmax=2.3,
% ymin=-1.8, ymax=2,
samples=10,
samples y=40,
domain=0.2:1.7, % Ist in Polarkoordinaten eigentlich der Radius
y domain=0:360, % Ist in Polarkoordinaten eigentlich der Winkel
enlarge z limits={value=0.7,upper}, % Längere Z-Achse nach oben
% z label style={at={(ticklabel* cs:1.01)}, anchor=south, }, %Achsenbeschriftung aussen
% x label style={at={(ticklabel* cs:1.01)}, anchor=west, }, %Achsenbeschriftung aussen
% y label style={at={(ticklabel* cs:1.01)}, anchor=west, }, %Achsenbeschriftung aussen
colormap/blackwhite,
]
\addplot3 [surf] ({x*cos(y)},{x*sin(y)},{-1/x}); % Gibt Problem
%
%\addplot3 [surf] ({x*cos(y)},{x*sin(y)},{-x}); % Gibt auch Problem
% \addplot3 [surf] ({x*cos(y)},{x*sin(y)},{x}); % Gibt kein Problem
\end{axis}
\end{tikzpicture}

\end{document}
62446245

rais
11-10-2017, 00:10
ergänze mal die Option


z buffer=sort,

zur axis-Umgebung.

VG

msthab
17-10-2017, 07:36
Super! Damit funktioniert's!
Danke!

Aber noch eine Frage:

Ich gebe die Bild-Größe an:
width=20cm,
height=20cm,

Wenn ich eine 2D-Kurve ausgebe wird die Größe ganz genutzt (z. B. mit \addplot {x};)
Im 3D-Modus ist das Bild aber viel kleiner als angegeben.
Gibt es dafür eine Erklärung?

Gruß

Manfred

rais
22-10-2017, 21:02
Ich gebe die Bild-Größe an:
width=20cm,
height=20cm,

Wenn ich eine 2D-Kurve ausgebe wird die Größe ganz genutzt (z. B. mit \addplot {x};)
Im 3D-Modus ist das Bild aber viel kleiner als angegeben.
Gibt es dafür eine Erklärung?

Die x- (Breite) und y- (Höhe) Komponenten werden für die räumliche Darstellung z. T. in die Darstellungsebene gedreht -- und damit runterskaliert.
Wenn Du testhalber mal


view={0}{90},

bei den Optionen zur axis-Umgebung ergänzt, schaust Du quasi auf die Trichteröffnung, die dann auch entsprechend größer dargestellt wird.

VG

msthab
24-10-2017, 09:01
O.K.
verstanden. Vielen Dank.

Noch eine letzte Frage:
Ich möchte die z-Achse erst ab 0 einzeichnen lassen.
Der Befehl

zmin=0,

zerstört aber das ganze Bild, während der entsprechende Befehl für xmin und ymin prima funktioniert. Woran liegt das?

rais
24-10-2017, 19:31
Ich möchte die z-Achse erst ab 0 einzeichnen lassen.
Der Befehl

zmin=0,

zerstört aber das ganze Bild, während der entsprechende Befehl für xmin und ymin prima funktioniert. Woran liegt das?

Bildest Du bei Deiner Funktion z nicht als -1/x mit positiven Werten für x (0,2 bis 1,7) ab? Wie soll z da Null oder gar positiv werden?

VG

msthab
25-10-2017, 07:33
Das ist natürlich richtig. Ich habe nur negative z-Werte.
Aber es müßte doch möglich sein, die Länge (Start- und Endpunkt) der z-Achse unabhängig von den tatsächlichen Werten festzulegen.
Hintergrund:
Was mich eigentlich stört ist, dass die z-Achse teilweise über dem Trichter liegt. Sie müßte eigentlich "im Trichter verschwinden", siehe Screenhot.

Gruß

Manfred6248

msthab
25-10-2017, 07:37
Ich habe eine "manuelle" Lösung gefunden.
Ich verberge die z-Achse mit

hide z axis,
und füge die Achse "manuell" als node ein

\draw [->] (axis cs: 0,0,-2.1) -- (axis cs: 0,0,2) node [above ] {$E_{\mathrm{pot}}$};
Klappt prima, siehe jpg-Bild

Gruß

Manfred

6247

Hier noch einmal der ganze Code:


\begin{tikzpicture}
\clip (2,2) rectangle (16,16);
\begin{axis}[
width=20cm,
height=20cm,
hide z axis,
xtick=\empty,
ytick=\empty,
ztick=\empty,
xlabel={$x$}, ylabel={$y$},
axis lines=center,
axis on top,
xmin=-1.8, xmax=2.3,
ymin=-1.8, ymax=2,
samples=40,
samples y=40,
domain=0.2:1.7,
y domain=0:360,
enlarge z limits={value=0.7,upper},
x label style={at={(ticklabel* cs:1.01)}, anchor=west, }, %Achsenbeschriftung aussen
y label style={at={(ticklabel* cs:1.01)}, anchor=west, }, %Achsenbeschriftung aussen
colormap/blackwhite,
z buffer=sort,
]
\addplot3 [surf] ({x*cos(y)},{x*sin(y)},{-1/x});
% Manuelle z-Achse, die im Trichter verschwindet
\draw [->] (axis cs: 0,0,-2.1) -- (axis cs: 0,0,2) node [above ] {$E_{\mathrm{pot}}$};
%
\end{axis}
\end{tikzpicture}

rais
26-10-2017, 21:16
Was mich eigentlich stört ist, dass die z-Achse teilweise über dem Trichter liegt. Sie müßte eigentlich "im Trichter verschwinden", siehe Screenhot.

Wieso?
Du hast doch selbst


axis on top,

angefordert...

VG

msthab
27-10-2017, 07:06
Ich musste das anfordern, da sonst die Achsen alle hinter dem Potentialtopf verschwinden (siehe Anhang). Die so erscheinende Achsenlage ist nach meiner Meinung ziemlich sinnlos, da der Koordinationursprung (0,0,0) in jedem Fall oberhalb des Potentialtops zu sehen sein muss.

Viele Grüße

Manfred
6249

rais
04-11-2017, 22:31
Ah, da hab ich das wohl etwas verwurschtelt...

VG