pgfplots / gnuplot: Cómo dibujar una función de dos parámetros en 3D
Quiero trazar una función de superficie 2-paramétrica
set parametric
splot cos(u)*cos(v),sin(u)*cos(v),sin(v)
(Sugerencia: si lo pongo en gnuplot, funciona).
Supongo que se necesitan configuraciones especiales en pgfplots para una función tan especial.
Entonces: ¿Por qué el segundo ejemplo no traza nada?
¿Qué opciones tengo que configurar aquí en 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}
Debería dar algo. Me gusta esto:
Respuestas
Obtiene un .gnuplotarchivo que puede mirar para ver qué código se está pasando a Gnuplot.
Por tu caso obtienes
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 puede ver, obtiene splot <domain settings> <your code>, lo que significa que Gnuplot obtiene
splot ... set parametric
que no funciona porque after sploty options debería haber una expresión de función. También puede ver el error de Gnuplot en el .logarchivo, dice
"test.pgf-plot.gnuplot" line 2: undefined variable: set
donde el seten cuestión es eso en set parametric.
Para solucionar esto, puede usar la parametricclave en el lado de TikZ de las cosas en lugar 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}
O puedes usar raw gnuplot. En ese caso, debe establecer el dominio y el tamaño de la muestra en el código de Gnuplot en lugar de pgfplotspasarlo:
% 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}