pgfplots / gnuplot: Comment dessiner une fonction 3D à deux paramètres

Aug 22 2020

Je veux tracer une fonction de surface à 2 paramètres

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

(Indice: si je le mets simplement dans gnuplot, cela fonctionne.)

Je suppose que des paramètres spéciaux dans pgfplots sont nécessaires pour une telle fonction spéciale.

Alors: pourquoi le 2ème exemple ne trace-t-il rien?
Quelles options dois-je définir ici dans pgfplots?

% 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}

Devrait donner qc. comme ça:

Réponses

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

Vous obtenez un .gnuplotfichier que vous pouvez consulter pour voir quel code est passé à Gnuplot.

Pour votre cas, vous obtenez

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) ;

Comme vous pouvez le voir, vous obtenez splot <domain settings> <your code>, ce qui signifie que Gnuplot obtient

splot ... set parametric

ce qui ne fonctionne pas car après splotet options, il devrait y avoir une expression de fonction. Vous pouvez également voir l'erreur de Gnuplot dans le .logfichier, il dit

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

où le seten question est-il set parametric.

Pour résoudre ce problème, vous pouvez utiliser la parametricclé du côté TikZ des choses au lieu de 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}

Ou vous pouvez utiliser raw gnuplot. Dans ce cas, vous devez définir le domaine et la taille de l'échantillon dans le code Gnuplot au lieu d' pgfplotsêtre transmis:

% 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}