pgfplots / gnuplot: come disegnare una funzione 3D a due parametri

Aug 22 2020

Voglio tracciare una funzione di superficie a 2 parametri

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

(Suggerimento: se lo metto in gnuplot, funziona.)

Immagino che per una funzione così speciale siano necessarie impostazioni speciali in pgfplots.

Allora: Perché il secondo esempio non traccia nulla?
Quali opzioni devo impostare qui in 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}

Dovrebbe dare qc. come questo:

Risposte

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

Ottieni un .gnuplotfile che puoi guardare per vedere quale codice viene passato a Gnuplot.

Per il tuo caso ottieni

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

Come puoi vedere ottieni splot <domain settings> <your code>, il che significa che Gnuplot ottiene

splot ... set parametric

che non funziona perché dopo splote opzioni dovrebbe esserci un'espressione di funzione. Puoi anche vedere l'errore di Gnuplot nel .logfile, dice

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

dove la setquestione è quella in set parametric.

Per risolvere questo problema puoi usare la parametricchiave sul lato TikZ delle cose invece di 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}

Oppure puoi usare raw gnuplot. In tal caso è necessario impostare il dominio e la dimensione del campione nel codice Gnuplot invece di pgfplotsessere trasmesso:

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