答案1
pgfplots
无法处理开箱即用的复杂坐标。不过,我认为在这种情况下也没有必要。您希望描绘一个映射 \mathds{C}\to\mathds{C},这在 3d 图上是不可能的,但您的目标结果似乎是 3d 图。要生成此类结果,您只需使用自己的坐标即可
({x*cos(y)},{x*sin(y)},{ln(x)+y})
其中x
是半径,y
是相位。现在有一个问题,我们只有 3 个坐标可用。由于域中用了两个坐标,我们需要使用投影。我不知道您在使用的图像中使用了什么投影,但以下内容似乎很接近:
\documentclass[tikz,border=3mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16,width=10cm,height=14cm}
\begin{document}
\begin{tikzpicture}
\begin{axis}[trig format plots=rad,view={-50}{12},
colormap={adopted}{rgb255(0cm)=(151,0,250);
rgb255(1cm)=(219,0,70);rgb255(2cm)=(186,255,60)},
z buffer=sort,zmin=-3.5*pi]
\addplot3 [surf,domain=0.001:4,domain y=-3*pi:3*pi,samples=25,samples y=109]
({x*cos(y)},{x*sin(y)},{ln(x)+y});
\end{axis}
\end{tikzpicture}
\end{document}
或者使用不同的角度。
\documentclass[tikz,border=3mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16,width=10cm,height=14cm}
\begin{document}
\begin{tikzpicture}
\begin{axis}[trig format plots=rad,view={70}{20},
colormap={adopted}{rgb255(0cm)=(151,0,250);
rgb255(1cm)=(219,0,70);rgb255(2cm)=(186,255,60)},
z buffer=sort,zmin=-3.5*pi]
\addplot3 [surf,domain=0.001:4,domain y=-3*pi:3*pi,samples=25,samples y=109]
({x*cos(y)},{x*sin(y)},{ln(x)+y});
\end{axis}
\end{tikzpicture}
\end{document}
如果您想使用其他投影,也可以内置此功能。