3d pgfplots 中的斜投影

3d pgfplots 中的斜投影

我如何制作 pgfplots 来从下图所示的视图显示坐标系。方格纸无关紧要,但正如您所见,x_1 轴应相对于方格纸通过正方形的对角线。假设两个正方形是 x_2 和 x_3 轴的一个单位,那么 x_3 轴的一个单位应该只是正方形。

在此处输入图片描述

操作视图选项并没有得到预期的结果:

\documentclass{standalone}

\usepackage{pgfplots}
\pgfplotsset{compat=newest}


\begin{document}
\begin{tikzpicture}
    \begin{axis}[xmax=2.5,ymax=2.5,zmax=1.45,xlabel=$x_1$,ylabel=$x_2$,zlabel=$x_3$,axis lines=center,view={135}{45}]
    \addplot3[
        opacity=0.3,
        surf,
        shader=flat,
        samples=50,
        domain=-2:2,y domain=-2:2] 
        {exp(-(x^2+y^2))};
    \end{axis}
\end{tikzpicture}
\end{document}

输出:

输出

这里 x_2 轴不在右边。

答案1

Percusse 的评论提供了关键词“斜投影”。通过谷歌搜索,我找到了以下解决方案:

\documentclass{standalone}

\usepackage{pgfplots}
\pgfplotsset{compat=newest}


\begin{document}
\begin{tikzpicture}
  \begin{axis}[
        x={(-0.3535cm,-0.3535cm)},    
        y={(1cm,0.0cm)}, 
        z={(0cm,1cm)},
        xmax=2.5,ymax=2.5,zmax=1.45,
        xlabel=$x_1$,ylabel=$x_2$,zlabel=$x_3$,
        axis lines=center]
    \addplot3[
        opacity=0.3,
        surf,
        shader=flat,
        samples=50,
        domain=-2:2,y domain=-2:2] 
        {exp(-(x^2+y^2))};
    \end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

您可以格式化轴,并显示您选择的坐标:

\documentclass{article}

\usepackage{pgfplots}
\pgfplotsset{compat=newest}

\pagestyle{empty}

\begin{document}
\begin{tikzpicture}[font=\tiny]
    \begin{axis}[    
        axis x line = middle,
        axis y line = middle,
        axis z line = middle,   
        view={150}{35},
        domain =-5:5,
        y domain =-5:5,
        restrict z to domain =0:20,
        xmax =5,
        xmin =-5,
        ymax =5,
        ymin =-5,   
        zmax = 20,      
        zmin = 0,   
        xtick={-4,...,4},
        ytick={-4,...,4},
        ztick={0,4,...,20}
    ]
    \draw (4,4,16) node[above left] {\normalsize $A$};    
    \draw[dashed] (4,4,16)--(0,0,16);
    \draw[dashed] (4,4,16)--(4,4,0);
    \draw[dashed] (4,0,0)--(4,4,0)--(0,4,0);
    \filldraw (4,4,16)  circle(1pt);
    \filldraw (4,4,0)  circle(1pt);
    \filldraw (4,0,0)  circle(1pt);
    \filldraw (0,4,0)  circle(1pt);
    \filldraw (0,0,16)  circle(1pt);
    \end{axis}
\end{tikzpicture}
\end{document}

并且 view={150}{35} 命令工作正常,第一部分改变 XOY 平面,发送旋转 Z 轴。

https://youtu.be/00S9l7pGkQY在本视频中,我展示了一些情节操作。视频语言是格鲁吉亚语,但所有内容都清晰地显示出来。

相关内容