我使用带有叠加层的 beamer 演示文稿通过 addplot3 显示 3D 图(参见 MWE)。在第二张幻灯片中绘制了带有标记的虚线。在第三张幻灯片中绘制了一个表面,从观察者的角度来看不可见的虚线部分被隐藏,但坐标 (4,4,0) 处的标记不会发生这种情况,该标记也应该对观察者隐藏。我该如何解决这个问题?我希望从观察者的角度来看不可见的所有对象都隐藏在表面后面。我尝试将表面的不透明度设置为 1,但没有任何反应。
\documentclass[]{beamer}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{frame}
\begin{tikzpicture}[scale=.75]
\begin{axis}[
clip=false,
xmax=20,ymax=20,zmax=20,xmin=0,ymin=0,zmin=0,
grid=both,
view/h=45,
small,]
\only<2->{\addplot3[dashed, color=red,mark=*,mark size=1.5pt,mark options={color=red,draw=red,fill=red}] coordinates{ (4,0,0) (4,4,0) (20,4,0) };}
\only<3->{\addplot3[surf,samples=20,domain=0:20, y domain=0:20,opacity=1]{x^(0.5) * y^(0.5)};}
\end{axis}
\end{tikzpicture}
\end{frame}
\end{document}
答案1
默认情况下,标记位于特殊图层上。一种选择是使用mark layer=like plot
(并将图放在适当的图层上),如下所示
\documentclass[]{beamer}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{frame}
\frametitle{Mark layers can be tricky}
\begin{tikzpicture}[scale=.75]
\begin{axis}[
clip=false,
xmax=20,ymax=20,zmax=20,xmin=0,ymin=0,zmin=0,
grid=both,
view/h=45,
small,small,set layers,
mark layer=like plot]
\begin{pgfonlayer}{pre main}
\only<2->{\addplot3[dashed, color=red,mark=*,mark size=1.5pt,mark options={color=red,draw=red,fill=red}] coordinates{ (4,0,0) (4,4,0) (20,4,0) };}
\end{pgfonlayer}
\only<3->{\addplot3[surf,samples=20,domain=0:20, y domain=0:20,opacity=1]{x^(0.5) * y^(0.5)};}
\end{axis}
\end{tikzpicture}
\end{frame}
\end{document}