如何按 x 或 y 划分 3D 图

如何按 x 或 y 划分 3D 图

当我在课堂上使用 3D 图时,我喜欢先沿每个轴表示 2D 图(就像我在“划分”3D 图一样),然后再以 3D 形式解释动态。这样,最终的 3D 图更容易让学生理解。

如何使用一组在样式中传递条件参数的二维图正确地“划分”三维图?

在此处输入图片描述 在此处输入图片描述 在此处输入图片描述

到目前为止,我得到了我喜欢的结果经过 (效率低下)将两种不同的风格剧情叠加。

它运行良好,但我正在重新发明轮子,因为 3D 绘图面已经存在,我只需要沿着唯一xy唯一显示它们即可获得我想要的结果。我可以在 3D 中显示 2D 版本或仅显示 3D 版本或两者兼而有之,这很方便。

我被困在哪儿了?

  1. 我创建了\newifs 来选择我想要 3D 图还是 2D 图集。这太费力了,很难正确。
  2. 因此,我如何传递与 \newif 等效的参数,以便样式处理 2D 和/或 3D 视图(而不是使用 2 种不同的样式绘制两次函数)。它还可以处理粒度以samples查看更多或更少的 2D 曲线。
  3. 另外,正如您在评论中的 tikzset 中看到的那样,2D/.style 3D/.style会产生多个错误。
  4. 根据...进行“分批”没有问题,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 xtranch y你会得到

在此处输入图片描述

等等等等。

相关内容