我正在尝试绘制 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={}
width
height
以下是使用 的结果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 节)。因此,获取所需比例的一种方法是提供具有正确比例的和值(确保您还设置了,以便在计算宽度和高度时仅考虑轴区域)。height
width
height
width
scale only axis
但是,对于希望尺寸为“正方形”的此类图,我会明确提供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}
\begin{tikzpicture}
\begin{axis}[x={(1cm,0)}, y={(0,1cm)}, z={(0,0)}]
\addplot3[surf] file {surfdata.dat};
\end{axis}
\end{tikzpicture}
\end{document}