pgfplots / gnuplot: Zeichnen einer zweiparametrischen 3D-Funktion

Aug 22 2020

Ich möchte eine 2-parametrische Oberflächenfunktion zeichnen

set parametric
splot cos(u)*cos(v),sin(u)*cos(v),sin(v) 

(Hinweis: Wenn ich es nur in Gnuplot stecke, funktioniert es.)

Ich denke, dass spezielle Einstellungen in pgfplots für eine solche spezielle Funktion notwendig sind.

Also: Warum zeichnet das 2. Beispiel nichts?
Welche Optionen muss ich hier in pgfplots einstellen?

% arara: pdflatex: {shell: yes}

\documentclass[margin=3mm, tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest, width=7cm}
\begin{document}

\begin{tikzpicture}
\begin{axis}[title=Works]
\addplot3[] 
gnuplot{sin(x)*sin(y)}; 
\end{axis}
\end{tikzpicture}

\begin{tikzpicture}[font=\footnotesize,]
\begin{axis}[title={Works not - what do I have to set?}]
\addplot3[]
gnuplot {
set parametric
splot cos(u)*cos(v),sin(u)*cos(v),sin(v) 
};
\end{axis}
\end{tikzpicture}
\end{document}
\end{document}

Sollte etw geben. so was:

Antworten

2 TorbjørnT. Aug 23 2020 at 17:07

Sie erhalten eine .gnuplotDatei, in der Sie sehen können, welcher Code an Gnuplot übergeben wird.

Für Ihren Fall bekommen Sie

set table "test.pgf-plot.table"; set format "%.5f"
set format "%.7e";; set samples 25, 25; set dummy x,y; set isosamples 25, 25; splot [x=-5:5] [y=-5:5]  set parametric splot cos(u)*cos(v),sin(u)*cos(v),sin(v) ;

Wie Sie sehen können, bekommen Sie splot <domain settings> <your code>, was bedeutet, dass Gnuplot bekommt

splot ... set parametric

Das funktioniert nicht, weil nach splotund Optionen ein Funktionsausdruck vorhanden sein sollte. Sie können den Fehler von Gnuplot auch in der .logDatei sehen, heißt es

"test.pgf-plot.gnuplot" line 2: undefined variable: set

wo das setin frage ist das in set parametric.

Um dies zu beheben, können Sie den parametricSchlüssel auf der TikZ-Seite verwenden, anstatt set parametric:

% arara: pdflatex: {shell: yes}
\documentclass[margin=3mm, tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest, width=7cm}
\begin{document}
\begin{tikzpicture}[font=\footnotesize,]
\begin{axis}[title={Works not - what do I have to set?}]
\addplot3[]
gnuplot [parametric=true] {
cos(u)*cos(v),sin(u)*cos(v),sin(v) 
};
\end{axis}
\end{tikzpicture}
\end{document}

Oder Sie können verwenden raw gnuplot. In diesem Fall müssen Sie die Domäne und die Stichprobengröße im Gnuplot-Code festlegen, anstatt pgfplotssie weiterzuleiten:

% arara: pdflatex: {shell: yes}
\documentclass[margin=3mm, tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest, width=7cm}
\begin{document}
\begin{tikzpicture}[font=\footnotesize,]
\begin{axis}[title={Works not - what do I have to set?}]
\addplot3[]
gnuplot [raw gnuplot] {
set parametric;
splot cos(u)*cos(v),sin(u)*cos(v),sin(v) 
};
\end{axis}
\end{tikzpicture}
\end{document}