pgfplots / gnuplot: Como desenhar uma função 3D de dois parâmetros paramétricos

Aug 22 2020

Eu quero plotar uma função de superfície 2-paramétrica

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

(Dica: se eu apenas colocar no gnuplot, ele funciona.)

Eu acho que configurações especiais em pgfplots são necessárias para essa função especial.

Então: Por que o segundo exemplo não representa nada?
Quais opções devo definir aqui no 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}

Deve dar sth. como isso:

Respostas

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

Você obtém um .gnuplotarquivo que pode examinar para ver qual código está sendo passado para o Gnuplot.

Para o seu caso, você recebe

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

Como você pode ver, você obtém splot <domain settings> <your code>, o que significa que o Gnuplot obtém

splot ... set parametric

o que não funciona porque após splote opções deve haver uma expressão de função. Você também pode ver o erro do Gnuplot no .logarquivo, diz

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

onde está o setem questão set parametric.

Para corrigir isso, você pode usar a parametricchave no lado TikZ das coisas em vez 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 você pode usar raw gnuplot. Nesse caso, você precisa definir o domínio e o tamanho da amostra no código Gnuplot, em vez de pgfplotsser passado adiante:

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