我在 MATLAB 中生成了一个 Delaunay 三角剖分曲面,我更愿意在 tikz 中渲染它。我使用 Nico Schlömer 的matlab2tikz
脚本来生成独立的 tex 文件。
MATLAB 结果如下所示:
但是,当我编译 matlab2tikz 生成的独立 .tex 文件时,它看起来像这样:
在 MATLAB 图像中,数据纵横比用 MATLAB 的命令设置daspect
,如下所示:
daspect([1000 1000 1])
我曾尝试使用 pgfplots 完成相同的操作unit vector ratio
。但是,无论我如何设置它都没有区别。在每种情况下,我都会收到此错误:
! Dimension too large.
<to be read again>
\relax
l.7398 \end{axis}
这些 pgfplots 设置中的任何一个都会导致错误:
unit vector ratio 1 1 1
unit vector ratio 1 1
unit vector ratio 1000 1000 1
unit vector ratio 1 1 0.001
或以上任何带有 * 的
而且,为了进行实验(我不想要 1 1 1 的比例,它只会给我一个平坦的表面):
axis equal
axis equal image
该plot box ratio
方法从这里也不起作用-同样的错误。
我认为它一定可以工作。除此之外,tikz 渲染看起来非常好。数据集大约有 7000 行,所以我无法在此处发布,而且无论如何它无需单位向量变换即可工作,因此我认为数据不是问题所在。
这是轴的代码(省略了大色彩图!):
\begin{axis}[%
%width=6.82222222222222in,
%height=3.40720720720721in,
area legend,
unit vector ratio = 1 1,
view={-37.5}{30},
scale only axis,
xmin=545550,
xmax=584400,
xlabel={Ost [m]},
xmajorgrids,
ymin=5542050,
ymax=5569500,
ylabel={Nord [m]},
ymajorgrids,
zmin=8.46471544296322,
zmax=16.9194594285807,
zlabel={$\text{U [ms}^{\text{-1}}\text{]}$},
zmajorgrids,
axis x line*=bottom,
axis y line*=left,
axis z line*=left
完整来源可能是在这里获得。
答案1
x
您可以通过自己明确提供和y
单位向量来解决该问题z
:
\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepackage{amsmath}
\begin{document}
\begin{tikzpicture}
\begin{axis}[%
area legend,
xlabel={Ost [m]},
xmajorgrids,
ylabel={Nord [m]},
x={(0.0001cm,0.00005cm)}, y={(-0.0001cm,0.00005cm)}, z={(0cm,0.2cm)},
ymajorgrids,
zmin=8.46471544296322,
zmax=16.9194594285807,
zlabel={$\text{U [ms}^{\text{-1}}\text{]}$},
zmajorgrids,
axis lines*=left,
colormap/violet
]
\addplot3[patch,forget plot] table[point meta=\thisrow{c}]{data.dat};
\end{axis}
\end{tikzpicture}
\end{document}
答案2
我找到了一个更令人满意的解决方案,它plot box ratio
最终利用了。事实证明,您不能使用 中的值来daspect
设置容积率:它们太大了。
那么哪些价值观做你用?
MATLAB 中的当前轴对象给出了答案。使用要导出的当前图形(通过调用figure(<figurehandle>)
或单击图形),获取轴句柄。该属性PlotBoxAspectRatio
在功能上等同于plot box ratio
。在调用之前,您需要此值matlab2tikz
。以下是 MATLAB 代码:
a1 = gca;
plotBoxAspect = get(a1,'PlotBoxAspectRatio');
plotBoxStr = sprintf('plot box ratio = %d %d %d',plotBoxAspect(1),plotBoxAspect(2),plotBoxAspect(3));
matlab2tikz('outputfile.tex','standalone',true,'extraAxisOptions',plotBoxStr);
结果与您可以合理预期的原始 MATLAB 曲面图非常接近:
使用这种方法,不需要手动设置单位向量。