我有一个 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 左右。
我发现如果我将ymin
0.5 改为 0,编译会顺利进行。如果能帮助解释为什么它在当前状态下不起作用,我将不胜感激。我需要 y 轴仅显示 0.5 到 1,就像在 MATLAB 中一样。
其次,我一直在尝试在表格中对齐图表,我目前的尝试如下所示。 我主要使用这个例子:在表格中插入图像和列表,但无法弄清楚两件事:
如何将文本置于标题“A”之下?
中间图表的垂直边缘与顶部不太对齐,如图中的红色箭头所示。这是因为中间图表的其中一个标签标题中有括号,需要将其向右推一点。我该如何让它们对齐?
如果可能的话,我希望通过在创建 .tikz 文件后不必对其进行更改来做到这一点matlab2tikz
,但我明白这根本不可能。
谢谢
答案1
“尺寸太大”的问题是 的一个弱点pgfplots
:它最终必须将所有坐标映射到 TeX 有限的数字范围内,并且它无法检测到如果不丢弃坐标就无法做到这一点。
在您的例子中,y 坐标的输入范围远大于实际显示的部分。我建议添加restrict y to domain=-5:4
- 这将丢弃任何低于 -5 和高于 4 的坐标(根据需要采用)。我认为这将有助于pgfplots
正确映射所有坐标。
关于对齐的东西:一般的建议是
- 控制图片的边界框。一个好主意是使用
\begin{tikzpicture}[trim axis right]
;这会将右轴线右侧的所有内容排除在边界框之外。然后,配置您的表格,使“B”列右对齐。 - 另一种选择是配置
ylabel style
和yticklabel style
使得它们具有minimum height
;也许这具有相同的效果。 - 仔细研究 pgfplots 手册中的“对齐选项”部分;它对多个轴的水平和垂直对齐都有大量输入。
如果您发布一个最小的工作示例来展示您目前所拥有的内容,那么可能会得到更详细的答案。
请注意,一般来说,每个帖子只应提出一个问题 - 单独解决问题比混合解决问题要简单得多。
如果需要的话,我建议针对对齐问题提出一个新问题;编辑这个问题可能会使答案与尺寸过大的问题难以区分开来。