当我在课堂上使用 3D 图时,我喜欢先沿每个轴表示 2D 图(就像我在“划分”3D 图一样),然后再以 3D 形式解释动态。这样,最终的 3D 图更容易让学生理解。
如何使用一组在样式中传递条件参数的二维图正确地“划分”三维图?
到目前为止,我得到了我喜欢的结果经过 (效率低下)将两种不同的风格剧情叠加。
它运行良好,但我正在重新发明轮子,因为 3D 绘图面已经存在,我只需要沿着唯一x
或y
唯一显示它们即可获得我想要的结果。我可以在 3D 中显示 2D 版本或仅显示 3D 版本或两者兼而有之,这很方便。
我被困在哪儿了?
- 我创建了
\newif
s 来选择我想要 3D 图还是 2D 图集。这太费力了,很难正确。 - 因此,我如何传递与 \newif 等效的参数,以便样式处理 2D 和/或 3D 视图(而不是使用 2 种不同的样式绘制两次函数)。它还可以处理粒度以
samples
查看更多或更少的 2D 曲线。 - 另外,正如您在评论中的 tikzset 中看到的那样,
2D/.style
3D/.style
会产生多个错误。 - 根据...进行“分批”没有问题,
y
但是\ifTranchX
沿着...尝试x
是行不通的。
这是 MWE
\documentclass{standalone}
\usepackage{pgfplots}
\usepackage{tikz}
\pgfplotsset{colormap={whitered}{color(0cm)=(white!20!orange); color(2.5cm)=(orange!75!red)}}
\newif\ifTwoD
\newif\ifThreeD
\newif\ifTranchX
\newif\ifTranchY
\TwoDtrue
\ThreeDtrue
%\TranchXtrue
\TranchYtrue
%\tikzset{
%2D/.style ={samples y=10,mesh,patch type=line,thick},
%3D/.style ={surf,opacity=0.2},
%}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
view={-30}{30},
axis lines=left,
axis on top,
axis line style={black!40},
xlabel style ={sloped},
ylabel style ={sloped},
colormap name=whitered,
ticklabel style={font=\small},
samples=51]
\ifTwoD
\ifTranchX
\addplot3[samples=10,mesh,patch type=line,thick]{exp(-x^2-y^2)};
\fi
\ifTranchY
\addplot3[samples y=10,mesh,patch type=line,thick]{exp(-x^2-y^2)};
\fi
\fi
\ifThreeD \addplot3 [surf,opacity=0.2] {exp(-x^2-y^2)}; \fi
\end{axis}
\end{tikzpicture}
\end{document}
注意:从文化角度来说,我试图模仿我在 80 年代(在法国,但也许在其他地方?)使用过的“papier millimétré”的颜色。 毫米纸
答案1
这只是收集帖子下的评论,并没有破解任何情节处理程序。我只是认为,与其再写一条评论,不如把所有内容都收集到一个帖子中,用户只需复制即可。我认为,如果我们有 x 和 y 方向的 if,我们就不需要另一个 2d 的 if。这些 if 可以按照通常的方式转换为 pgf 键。必须\tikzset
成为\pgfplotsset
能够“托管”真正的 pgfplots 样式。
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}
\pgfplotsset{colormap={whitered}{color(0cm)=(white!20!orange); color(2.5cm)=(orange!75!red)}}
\newif\ifThreeD
\newif\ifTranchX
\newif\ifTranchY
\ThreeDfalse
\TranchXfalse
\TranchYfalse
\pgfplotsset{tranch 3d/.is if=ThreeD,
tranch y/.is if=TranchY,tranch x/.is if=TranchX,
2D/.style ={samples y=10,mesh,patch type=line,thick},
3D/.style ={surf,opacity=0.2,postaction={draw}},
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[tranch 3d,tranch x,
view={-30}{30},
axis lines=left,
axis on top,
axis line style={black!40},
xlabel style ={sloped},
ylabel style ={sloped},
colormap name=whitered,
ticklabel style={font=\small},
samples=51]
\ifTranchX
\addplot3[2D] (x,y,{exp(-x^2-y^2)});
\fi
\ifTranchY
\addplot3[2D] (y,x,{exp(-x^2-y^2)});
\fi
\ifThreeD
\addplot3 [3D] {exp(-x^2-y^2)};
\fi
\end{axis}
\end{tikzpicture}
\end{document}
如果你替换tranch x
为tranch y
你会得到
等等等等。