matlab2tikz 的尺寸太大,并且对齐图轴

matlab2tikz 的尺寸太大,并且对齐图轴

我有一个 MATLAB 生成的图,如下所示:

MATLAB 生成的图

使用此代码生成:

plot(fitGoodnessNRMSE,'b','LineWidth',1);
axis([1 511 0.5 1]);
ylabel('Normalized RMS error'); xlabel('q (um^-1)');

然后我使用 matlab2tikz() 将其导出为 tikz。并将其包含在我的 latex 文档中:

\documentclass{standalone}
\usepackage{graphicx}
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{amsmath}
\begin{document}
\input{test.tikz}
\end{document}

由于以下原因,latex 文件无法编译Error: Dimension too large. <recently read> \pgf@yy l.537 \end{axis}.

.tikz文档内部内容如下:

\begin{tikzpicture}
\begin{axis}[%
width=4.52083333333333in,
height=3.565625in,
scale only axis,
xmin=1, xmax=511, xlabel={$\text{q (um}^\text{-}\text{1)}$},
ymin=0.5, ymax=1, ylabel={Normalized RMS error}]
\addplot [color=blue,solid,line width=1.0pt,forget plot]
table[row sep=crcr]{
1    -57.943745    \\
2    -14.11968    \\
3    -5.535387    \\
4    -2.4488078    \\
5    -1.0804409    \\
6    -0.30200709    \\
7    0.053585582    \\
8    0.32392563    \\
9    0.44304278    \\
.
.
511    0.90342708    \\
};
\end{axis}
\end{tikzpicture}%

请注意,大多数点的数据都在 0.8 或 0.9 左右。

我发现如果我将ymin0.5 改为 0,编译会顺利进行。如果能帮助解释为什么它在当前状态下不起作用,我将不胜感激。我需要 y 轴仅显示 0.5 到 1,就像在 MATLAB 中一样。

其次,我一直在尝试在表格中对齐图表,我目前的尝试如下所示。 tikz 绘图示例 我主要使用这个例子:在表格中插入图像和列表,但无法弄清楚两件事:

  • 如何将文本置于标题“A”之下?

  • 中间图表的垂直边缘与顶部不太对齐,如图中的红色箭头所示。这是因为中间图表的其中一个标签标题中有括号,需要将其向右推一点。我该如何让它们对齐?

如果可能的话,我希望通过在创建 .tikz 文件后不必对其进行更改来做到这一点matlab2tikz,但我明白这根本不可能。

谢谢

答案1

“尺寸太大”的问题是 的一个弱点pgfplots:它最终必须将所有坐标映射到 TeX 有限的数字范围内,并且它无法检测到如果不丢弃坐标就无法做到这一点。

在您的例子中,y 坐标的输入范围远大于实际显示的部分。我建议添加restrict y to domain=-5:4- 这将丢弃任何低于 -5 和高于 4 的坐标(根据需要采用)。我认为这将有助于pgfplots正确映射所有坐标。


关于对齐的东西:一般的建议是

  • 控制图片的边界框。一个好主意是使用 \begin{tikzpicture}[trim axis right];这会将右轴线右侧的所有内容排除在边界框之外。然后,配置您的表格,使“B”列右对齐。
  • 另一种选择是配置ylabel styleyticklabel style使得它们具有minimum height;也许这具有相同的效果。
  • 仔细研究 pgfplots 手册中的“对齐选项”部分;它对多个轴的水平和垂直对齐都有大量输入。

如果您发布一个最小的工作示例来展示您目前所拥有的内容,那么可能会得到更详细的答案。

请注意,一般来说,每个帖子只应提出一个问题 - 单独解决问题比混合解决问题要简单得多。

如果需要的话,我建议针对对齐问题提出一个新问题;编辑这个问题可能会使答案与尺寸过大的问题难以区分开来。

相关内容