我正在尝试绘制 ln(z) 的黎曼曲面,并编写了以下代码:
\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.11}
\begin{document}
\begin{tikzpicture}
\begin{axis}[view={60}{30},
domain=-10:10,
y domain=-10:10]
\addplot3[surf, samples=50] {atan2(y,x)/180*pi};
\addplot3[surf, samples=50] {atan2(y,x)/180*pi+2*pi};
\end{axis}
\end{tikzpicture}
\end{document}
然而,这会产生类似如下的图像:
其中有一个跳跃,我想消除它。
我尝试写
\begin{axis}[view={60}{30},
domain=-10:10,
y domain=-10:10]
\addplot3[surf, samples=50, samples y=0] {atan2(y,x)/180*pi};
\addplot3[surf, samples=50, samples y=0] {atan2(y,x)/180*pi+2*pi};
\end{axis}
\end{tikzpicture}
但编译器返回错误,
! 软件包 pgfplots 错误:抱歉,您不能在此上下文中使用“y”。PGFPlots 期望采样一条线,而不是一个网格。
如何修复此问题?发生了什么?
答案1
samples y
设置计算数据点的域中的 y 值的数量。因此,将其设置为零是没有意义的,否则您将根本得不到任何点。
我猜你想要下面的输出,我在这里做的是将每个表面分成两部分,一个用于 y<0,一个用于 y>0。我不知道这是否是最好的方法。
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.11}
\begin{document}
\begin{tikzpicture}
\begin{axis}[view={60}{30},
domain=-10:10,
]
\addplot3[surf, samples=25,y domain=-10:-0.001] {atan2(y,x)/180*pi};
\addplot3[surf, samples=25,y domain=0.001:10] {atan2(y,x)/180*pi};
\addplot3[surf, samples=25,y domain=-10:-0.001] {atan2(y,x)/180*pi+2*pi};
\addplot3[surf, samples=25,y domain=0.001:10] {atan2(y,x)/180*pi+2*pi};
\end{axis}
\end{tikzpicture}
\end{document}