如何设置 2D(扁平 3D)曲面图的纵横比?

如何设置 2D(扁平 3D)曲面图的纵横比?

我正在尝试绘制 2D 曲面图,在 pgfplots 中执行此操作的方法似乎是绘制 3D 曲面图,然后调整视图。这很有效,直到我尝试调整纵横比。2D 选项不起作用,因为它毕竟是一个 3D 图,一旦plot box ratio我调整,它就会停止工作view。我采用了 pgfplots 手册中的一个例子(第 4.5.2 节,所有 y 值乘以 2):

\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[view={0}{90},plot box ratio={1}{2}{1}]
% We have `surfdata.dat' with
% ---------
% 0 0 0.8
% 1 0 0.56
% 2 0 0.5
% 3 0 0.75
%
% 0 2 0.6
% 1 2 0.3
% 2 2 0.21
% 3 2 0.3
%
% 0 4 0.68
% 1 4 0.22
% 2 4 0.25
% 3 4 0.4
%
% 0 6 0.7
% 1 6 0.5
% 2 6 0.58
% 3 6 0.9
% -> yields a 4x4 matrix:   
    \addplot3[surf] file {surfdata.dat};
\end{axis}
\end{tikzpicture}
\end{document}

我的输出在左边,我的预期输出在右边(显然我不希望所有的刻度都扭曲)。

在此处输入图片描述

答案1

正如杰克指出的那样,问题在于plot box ratio它被宽度和高度覆盖(我认为它仅对 3d 轴有用)。

这里使用的选项是unit vector ratio=<x> <y> <z>(不带括号):

在此处输入图片描述

\documentclass{article}
\usepackage{pgfplots}
\usepackage{filecontents}

\begin{filecontents}{surfdata.dat}
 0 0 0.8
 1 0 0.56
 2 0 0.5
 3 0 0.75

 0 2 0.6
 1 2 0.3
 2 2 0.21
 3 2 0.3

 0 4 0.68
 1 4 0.22
 2 4 0.25
 3 4 0.4

 0 6 0.7
 1 6 0.5
 2 6 0.58
 3 6 0.9
\end{filecontents}

\begin{document}
\thispagestyle{empty}
\begin{tikzpicture}
\begin{axis}[view={0}{90},unit vector ratio*=1 2 1]
% We have `surfdata.dat' with
% ---------
% 0 0 0.8
% 1 0 0.56
% 2 0 0.5
% 3 0 0.75
%
% 0 2 0.6
% 1 2 0.3
% 2 2 0.21
% 3 2 0.3
%
% 0 4 0.68
% 1 4 0.22
% 2 4 0.25
% 3 4 0.4
%
% 0 6 0.7
% 1 6 0.5
% 2 6 0.58
% 3 6 0.9
% -> yields a 4x4 matrix:   
    \addplot3[surf] file {surfdata.dat};
\end{axis}
\end{tikzpicture}
\end{document}

请注意,unit vector ratio(不带星号*)将扩大轴限制以满足宽度和高度。带星号的版本将缩小尺寸以匹配限制(这正是您在此处想要的)。

请注意,我的方法与Jake 建议的unit vector ratio*和之间的唯一区别在于,我的方法仍将使用(其中一个) / ,而 Jake 的方法则通过单位向量明确控制轴维度。然而,两者完全等价。我想,在您的上下文中,这只是个人喜好问题。x={},y={},z={}widthheight

以下是使用 的结果unit vector ratio*=1 1 1(与 相同axis equal image):

在此处输入图片描述

答案2

filecontents环境将其内容写入文件。)

您可以添加yscale=2轴选项。这是 TikZ 的一个选项,但在本例中也适用。

pgfplots提供了选项y post scale,也可以使用。这在第 4.9 节中有记录扩展 (2011 年 7 月 29 日手册pgfplots第 196 页)。

\documentclass{standalone}
\usepackage{pgfplots}
\usepackage{filecontents}
\begin{filecontents}{surfdata.dat}
 0 0 0.8
 1 0 0.56
 2 0 0.5
 3 0 0.75

 0 2 0.6
 1 2 0.3
 2 2 0.21
 3 2 0.3

 0 4 0.68
 1 4 0.22
 2 4 0.25
 3 4 0.4

 0 6 0.7
 1 6 0.5
 2 6 0.58
 3 6 0.9
\end{filecontents}

\begin{document}
\begin{tikzpicture}
\begin{axis}[view={0}{90},yscale=2]
    \addplot3[surf] file {surfdata.dat};
\end{axis}
\end{tikzpicture}
\begin{tikzpicture}
\begin{axis}[view={0}{90},%
             y post scale=2,
             %ytick={2,4,6}  % uncomment to have the same yticks as the other
             ]
    \addplot3[surf] file {surfdata.dat};
\end{axis}
\end{tikzpicture}
\end{document}

yscale在左边,y post scale在右边。

在此处输入图片描述

答案3

被绘图的和设置plot box ratio所覆盖(请参阅手册的 4.10.3 节)。因此,获取所需比例的一种方法是提供具有正确比例的和值(确保您还设置了,以便在计算宽度和高度时仅考虑轴区域)。heightwidthheightwidthscale only axis

但是,对于希望尺寸为“正方形”的此类图,我会明确提供xyz向量:

\documentclass{article}
\usepackage{pgfplots}
\usepackage{filecontents}
\begin{filecontents}{surfdata.dat}
 0 0 0.8
 1 0 0.56
 2 0 0.5
 3 0 0.75

 0 2 0.6
 1 2 0.3
 2 2 0.21
 3 2 0.3

 0 4 0.68
 1 4 0.22
 2 4 0.25
 3 4 0.4

 0 6 0.7
 1 6 0.5
 2 6 0.58
 3 6 0.9
 \end{filecontents}
\begin{document}
\begin{tikzpicture}
\begin{axis}[x={(1cm,0)}, y={(0,1cm)}, z={(0,0)}]
    \addplot3[surf] file {surfdata.dat};
\end{axis}
\end{tikzpicture}
\end{document}

相关内容