pgfplots/gnuplot:如何绘制 3D 双参数函数

pgfplots/gnuplot:如何绘制 3D 双参数函数

我想绘制一个 2 参数曲面函数

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

(提示:如果我将它放入 gnuplot 它就可以工作。)

我猜测 pgfplots 中的特殊设置对于这种特殊功能是必要的。

那么:为什么第二个示例没有绘制任何内容?
我必须在 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}

在此处输入图片描述

应该像这样给予某物:

在此处输入图片描述

答案1

您将获得一个.gnuplot文件,您可以查看该文件以了解哪些代码被传递给了 Gnuplot。

对于你的情况你得到

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

正如您所看到的,您得到了splot <domain settings> <your code>,这意味着 Gnuplot 得到了

splot ... set parametric

这不起作用,因为在splot和选项之后应该有一个函数表达式。您还可以在文件中看到 Gnuplot 的错误.log,它说

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

其中 的set问题是指set parametric

要解决这个问题,你可以使用parametricTikZ 方面的键,而不是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}

或者您可以使用raw gnuplot。在这种情况下,您需要在 Gnuplot 代码中设置域和样本大小,而不是传递pgfplots

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

相关内容