三维图中的轴和缩放比例

三维图中的轴和缩放比例

朋友们,我苦苦思索如何让轴出现在图“内部”。当我使用该选项时,axis on top它总是出现在图的前面,而当我不使用它时,它们会留在图的后面。有没有办法让轴仅在图不在它前面时才可见?此外,可以缩放绘制函数的 z 轴吗?

您可以在下面看到我拥有的以及我想要拥有的代码和数据。

\documentclass[12pt,a4paper,final]{report}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
    \begin{center}
        \begin{tikzpicture}[]
            \begin{axis}[axis lines=center,
                axis on top,
                xtick=\empty,
                ytick=\empty,
                ztick=\empty,
                xrange=-2:2,
                yrange=-2:2
                ]
                % plot
                \addplot3[domain=-1:1,y domain=-1:1,colormap/viridis,surf]
                    {sqrt(x^2+y^2)};
                \addplot3[domain=-1:1,y domain=-1:1,colormap/viridis,mesh]
                    {-sqrt(x^2+y^2)};
            \end{axis}
        \end{tikzpicture}
    \end{center}
\end{document}

左边:我拥有的,右边:我想要得到的。

左边是我拥有的,右边是我想要得到的

答案1

问题是它pgfplots(目前)还没有真正的 3D 引擎。因此,像标准技巧这样的方法axis background无法为您提供所需的情节。因此,据我目前所知,您有三个选择:

  1. 分两步在不同的图层上绘制图形
  2. 手工绘制轴线
  3. 等几年
  4. 使用渐近线

如果你选择第一个选项,请查看

\documentclass[12pt,a4paper,final]{report}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.15} %<-added
\begin{document}
    \begin{center}
        \begin{tikzpicture}
            \begin{axis}[axis lines=center,
                axis on top,
                set layers=default,
                xtick=\empty,
                ytick=\empty,
                ztick=\empty,
                xrange=-2:2,
                yrange=-2:2,
                unit vector ratio=1 1 1,% <- HERE (taken from Phelype Oleinik's deleted answer)
                scale=3 %<- added to compensate for the downscaling
        % resulting from unit vector ratio=1 1 1
                ]
                % plot
                \addplot3[domain=-1:1,y domain=0:1,colormap/viridis,surf]
                    {sqrt(x^2+y^2)};
                \addplot3[domain=-1:1,y domain=-1:0,colormap/viridis,surf,
                on layer=axis foreground]
                    {sqrt(x^2+y^2)};
                \addplot3[domain=0:1,y domain=-1:1,colormap/viridis,surf,
                on layer=axis foreground]
                    {sqrt(x^2+y^2)};
                \addplot3[domain=-1:1,y domain=-1:1,colormap/viridis,mesh]
                    {-sqrt(x^2+y^2)};
            \end{axis}
        \end{tikzpicture}
    \end{center}
\end{document}

在此处输入图片描述

更新:我改编了axis ratioPhelype Oleinik 已删除答案中的指令(谢谢!)。这解决了您的第二个请求,我在此答案的先前版本中一直忽略了该请求(抱歉)。在这种情况下,实现我认为您想要的东西相当简单。但在更复杂的情况下,此技巧可能会失败。

如果您选择第四种方式,您可以考虑:

\documentclass{standalone}
\usepackage{asymptote}
\begin{document}
\begin{asy}
import graph3;
size(400); 
currentprojection=orthographic(4,1,1);
size3(12cm,12cm,8cm,IgnoreAspect);

real f(pair z) {
  real r=abs(z);
  return r;
}

real g(pair z) {
  real r=abs(z);
  return -r;
}

limits((-2,-2,-1.2),(2,2,1.2));
currentprojection=orthographic(1,-2,0.5);


draw(surface(f,(-2,-2),(2,2),nx=100, Spline), rgb(.6,1,0.6));

draw(surface(g,(-2,-2),(2,2),nx=100, Spline), lightgray+opacity(.7));

draw(Label("$x$",1),(-2,0,0)--(2,0,0),darkgreen,Arrow3);
draw(Label("$y$",1),(0,-2,0)--(0,2,0),darkgreen,Arrow3);
draw(Label("$f$",1),(0,0,-2)--(0,0,2),darkgreen,Arrow3);

\end{asy}
\end{document}

在此处输入图片描述

例如这里了解更多渐近线示例。

相关内容