答案1
我认为所有这些图都可以用 pgfplots 生成。直方图可以按照以下方式生成这个帖子,并将曲面作为参数图。以下是一个例子。
\documentclass[tikz,border=3mm]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{colormaps}
\pgfplotsset{compat=1.17}
\begin{document}
\begin{tikzpicture}
\begin{axis}[hide axis,view={50}{15},unit vector ratio=1 1 1,
colormap/viridis,
declare function={R(\u)=0.5+\u/360;rr(\u)=0.05+\u/1080;
torusx(\u,\v)=cos(\u)*(R(\u) + rr(\u)*cos(\v));
torusy(\u,\v)=(R(\u) + rr(\u)*cos(\v))*sin(-1*\u);
torusz(\u,\v)=rr(\u)*sin(\v);}]
\addplot3[surf,point meta=rawx,%shader=interp,
domain=0:720,domain y=0:360,samples=36,
z buffer=sort]
({torusx(x,y)},{torusy(x,y)},{torusz(x,y)-3*rr(x)});
\end{axis}
\end{tikzpicture}
\end{document}
或者
\documentclass[tikz,border=3mm]{standalone}
\usepackage{pgfplots}
%\usepgfplotslibrary{colormaps}
\pgfplotsset{compat=1.17}
\begin{document}
\begin{tikzpicture}
\begin{axis}[hide axis,view={50}{15},unit vector ratio=1 1 1,
colormap/viridis,
declare function={R(\u)=0.5+\u/360;rr(\u)=0.05+\u/1080;
torusx(\u,\v)=cos(\u)*(R(\u) + rr(\u)*cos(\v));
torusy(\u,\v)=(R(\u) + rr(\u)*cos(\v))*sin(-1*\u);
torusz(\u,\v)=rr(\u)*sin(\v);}]
\addplot3[surf,point meta=u,variable=u,variable y=v,%shader=interp,
domain=0:720,domain y=0:360,samples=36,
z buffer=sort]
({torusx(u,v)},{torusy(u,v)},{torusz(u,v)-3*rr(u)});
\end{axis}
\end{tikzpicture}
\end{document}