pgfplots / gnuplot: come disegnare una funzione 3D a due parametri
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
Ottieni un .gnuplot
file 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 splot
e opzioni dovrebbe esserci un'espressione di funzione. Puoi anche vedere l'errore di Gnuplot nel .log
file, dice
"test.pgf-plot.gnuplot" line 2: undefined variable: set
dove la set
questione è quella in set parametric
.
Per risolvere questo problema puoi usare la parametric
chiave 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 pgfplots
essere 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}