我正在尝试绘制下图,其中包含 4 个子图。第一个图显示了我想要更正的图类型。更正处以问题标记。我尝试了上一篇文章中的答案,代码如下所示。
结果显示在结果部分。但子图和标签对齐的问题仍然存在。有人可以建议对我的代码进行更改,从而得到更好、更有意义的图吗?
需要更正:
结果:
代码:
\documentclass[12pt, a4paper,
parskip=half,
toc=bibliography,
numbers=noendperiod
]{scrbook}
\usepackage[hmargin={3.0cm, 2.5cm},
vmargin={2.5cm, 2.0cm},
includehead, includefoot
]{geometry}
\usepackage[UKenglish]{babel}
\usepackage[T1]{fontenc}
\usepackage{scrlayer-scrpage}
\usepackage{subcaption}
\usepackage{caption}
\addtokomafont{caption}{\scriptsize}
\setkomafont{captionlabel}{\bfseries\rmfamily}
\usepackage[dvipsnames,table,xcdraw]{xcolor}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\begin{document}
\begin{figure}[ht]
\pgfplotsset{
width=\linewidth, height=0.75\linewidth,
enlarge y limits=0.1,
%tick label style={font=\scriptsize},
%xticklabel style = {text width=0.4em},
%ylabel style = {text width=1em, inner sep=2pt},
%yticklabel style = {text width=0.2em},
%label style={font=\bfseries\boldmath},
%tick label style={font=\bfseries\boldmath},
%
%tick align = outside,
%tick pos = left,
%every axis plot post/.append style={color=Blue, dashed, mark=*},
}
\begin{subfigure}[t]{0.48\linewidth}
\begin{tikzpicture}
\begin{loglogaxis}[
xmin=0.1, xmax=0.1e8,
ymin=1e-8, ymax=5e3,
xlabel={Number of Flops},
ylabel={Normalized MSE: $\log_{10} (e)$ },
scatter/classes={ a={mark=square*, blue}, b={mark=square*, red}, c={mark=square, black}, d={mark=triangle*, blue}, e={mark=triangle*, red},f={mark=triangle*, black},g={mark=x, black}, h={mark= diamond*, pink} },
]
\addplot[scatter, only marks,
scatter src=explicit symbolic]
table[meta=label] {
x y label
1320.9279232530525 0.9258769833615981 a
3102.831857215906 0.7072210955836371 a
};
\end{loglogaxis}
\end{tikzpicture}
\caption{Plot 1}
\end{subfigure}
\hfill
\begin{subfigure}[t]{0.48\linewidth}
\begin{tikzpicture}
\begin{axis}[
domain=0:1,
ymax=1,
xlabel={Input $x$},
ylabel={$f(x)$},
%samples=801
]
\addplot {sin(5*deg(x))};
\addplot {sin(10*deg(x))};
\legend{$\sin(5x)$,$\sin(10x)$,$\sin(50x)$}
\end{axis}
\end{tikzpicture}
\caption{Plot 2}
\end{subfigure}
\medskip
\begin{subfigure}[t]{0.48\linewidth}
\begin{tikzpicture}
\begin{loglogaxis}[
xmin=0.1, xmax=0.1e8,
ymin=1e-13, ymax=5e3,
xlabel={Number of Flops},
ylabel={Normalized MSE: $\log_{10} (e)$ },
%label style={font=\bfseries\boldmath},
%tick label style={font=\bfseries\boldmath},
scatter/classes={ a={mark=square*, blue}, b={mark=square*, red}, c={mark=square, black}, d={mark=triangle*, blue}, e={mark=triangle*, red},f={mark=triangle*, black},g={mark=x, black}, h={mark= diamond*, pink} },
]
\addplot[scatter, only marks,
scatter src=explicit symbolic]
table[meta=label] {
x y label
55.57063517556737 0.28272347338878956 a
285.8811806506138 0.003443221651312178 a
};
\end{loglogaxis}
\end{tikzpicture}
\caption{Plot 3}
\end{subfigure}
\hfill
\begin{subfigure}[t]{0.48\linewidth}
\begin{tikzpicture}
\begin{axis}[
xlabel={Input $x$},
ylabel={$f(x)$},
ymin= 0, ymax=1e2,
]
\addplot {e^x)};
\addplot {e^(2*x))};
\legend{$\exp(x)$,$\exp(2x)$}
\end{axis}
\end{tikzpicture}
\caption{Plot 4}
\end{subfigure}
\caption{caption for all plots}
\label{all_plots}
\end{figure}
\end{document}
新更新:
更新后的数据
更新的代码:
\documentclass[12pt, a4paper,
parskip=half,
toc=bibliography,
numbers=noendperiod
]{scrbook}
\usepackage[hmargin={3.0cm, 2.5cm},
vmargin={2.5cm, 2.0cm},
includehead, includefoot
]{geometry}
\usepackage[UKenglish]{babel}
\usepackage[T1]{fontenc}
\usepackage{scrlayer-scrpage}
\usepackage{subcaption}
\usepackage{caption}
\setkomafont{captionlabel}{\bfseries\rmfamily}
\usepackage[dvipsnames,table,xcdraw]{xcolor}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\usepackage[font=normalsize]{subcaption}
\begin{document}
\begin{figure}[ht]
\pgfplotsset{
width=\linewidth, height=0.9\linewidth,
enlarge y limits=0.1,
%tick label style={font=\scriptsize},
xticklabel style = {text width=0.8em},
%ylabel style = {text width=1em, inner sep=2pt},
yticklabel style = {text width=2.0em, anchor= east},
label style={font=\bfseries\boldmath},
%tick label style={font=\bfseries\boldmath},
%
%tick align = outside,
tick pos = left,
%every axis plot post/.append style={color=Blue, dashed, mark=*},
}
\begin{subfigure}[t]{0.48\linewidth}
\begin{tikzpicture}
\begin{loglogaxis}[
xmin=10, xmax=0.1e8,
ymin=1e-8, ymax=1e2,
xlabel={Number of Flops},
ylabel={Normalized MSE: $\log_{10} (e)$ },
scatter/classes={ a={mark=square*, blue}, b={mark=square*, red}, c={mark=square, black}, d={mark=triangle*, blue}, e={mark=triangle*, red},f={mark=triangle*, black},g={mark=x, black}, h={mark= diamond*, pink} },
]
\addplot[scatter, only marks,
scatter src=explicit symbolic]
table[meta=label] {
x y label
1320.9279232530525 0.9258769833615981 a
};
\end{loglogaxis}
\end{tikzpicture}
\caption{Plot 1}
\end{subfigure}
\hfill
\begin{subfigure}[t]{0.48\linewidth}
\begin{tikzpicture}
\begin{axis}[
domain=0:1,
ymax=1,
xlabel={Input $x$},
ylabel={$f(x)$},
%samples=801
]
\addplot[orange, mark=*] {sin(5*deg(x))};
\addplot[black, mark=*] {sin(10*deg(x))};
\legend{$\sin(5x)$,$\sin(10x)$,$\sin(50x)$}
\end{axis}
\end{tikzpicture}
\caption{Plot 2}
\end{subfigure}
\medskip
\begin{subfigure}[t]{0.48\linewidth}
\begin{tikzpicture}
\begin{loglogaxis}[
xmin=10, xmax=0.1e8,
ymin=1e-13, ymax=1e1,
xlabel={Number of Flops},
ylabel={Normalized MSE: $\log_{10} (e)$ },
%label style={font=\bfseries\boldmath},
%tick label style={font=\bfseries\boldmath},
scatter/classes={ a={mark=square*, blue}, b={mark=square*, red}, c={mark=square, black}, d={mark=triangle*, blue}, e={mark=triangle*, red},f={mark=triangle*, black},g={mark=x, black}, h={mark= diamond*, pink} },
]
\addplot[scatter, only marks,
scatter src=explicit symbolic]
table[meta=label] {
x y label
55.57063517556737 0.28272347338878956 a
};
\end{loglogaxis}
\end{tikzpicture}
\caption{Plot 3}
\end{subfigure}
\hfill
\begin{subfigure}[t]{0.48\linewidth}
\begin{tikzpicture}
\begin{axis}[
domain=0:1,
xlabel={Input $x$},
ylabel={$f(x)$},
ymin= 0, ymax=1e1,
]
\addplot[orange, mark=*] {e^x)};
\addplot[black, mark=*] {e^(2*x))};
\legend{$\exp(x)$,$\exp(2x)$}
\end{axis}
\end{tikzpicture}
\caption{Plot 4}
\end{subfigure}
\caption{caption for all plots}
\label{all_plots}
\end{figure}
\end{document}
答案1
这不是完整的答案,但评论太长了。其中一些要点指的是该问题的旧版本。
初步意见
- 请注意,当我按原样编译您的代码时,出现“尺寸太大”错误。
- 我,以及其他使用您的代码的人,都很高兴有正确缩进的代码,因为这样更容易阅读。
为什么会出现这些问题?
- 首先,你设置
width
和height
。我读(例如pgfplots 具有固定宽度的图形)pgfplots 仅估计尺寸,因此可能会存在一些不准确之处。 - 旋转的 ylabel:您指定了
trig format = rad
。因此,ylabel 不是旋转 90°(度),而是旋转 90(弧度),相当于大约 117°——即标签的角度。 - 第一行垂直对齐:您的 xlabel 和 xticklabel 似乎具有不同的字体大小和系列。此外,左侧 xticklabel 有指数,而右侧没有。因此,左侧图的 xticklabel 较高,需要更多空间,因此它们将图向上移动。
- 第二行的垂直对齐:除了上一点之外,您完全省略了 xtick(标签),因此图不会被向上推。
- 水平对齐左列:上图中的指数有符号,二数字,而较低的数字有一个符号和一数字。
- 水平对齐右列:上图中的 yticklabels做有一个标志,而下面地块上的不。
新要点
- 对我来说,尺寸过大错误仍然存在。在右下角的图中,域可能是 [-5, 5],即红色图达到值 e^(2*5)。这个值对于 TeX 来说太大了。
\addtokomafont{caption}{\scriptsize}
设置脚本大小的标题。
非常新的要点
- 未对齐的 yticklabels:一旦您设置
yticklabel style = {text width=2.0em}
,yticklabels 就会变为左对齐。
如何解决这些问题
- 旋转的 ylabel:可以轻松解决:省略
trig format = rad
并使用\addplot {sin(5*deg(x))};
代替\addplot {sin(5*x)};
。 - 第二行垂直对齐:添加 xtick(标签)。为什么要省略它们?
新要点
\addplot[domain=-5:2.3] {e^(2*x))};
尺寸过大错误:您可以在右下方的图中使用它来避免它(请注意 e^(2*2.3) \approx 1e2)。- 标题字体大小:注释上述行至少会将其设置为 11 号字体大小,但还不能设置为默认字体大小 12 号字体大小。因此请使用
\usepackage[font=normalsize]{subcaption}
。
非常新的要点
- yticklabels 未对齐:改用
yticklabel style = {text width=2.0em, align=right}
。锚点与问题无关。
对于其他问题我目前还没有答案。
其他的建议
- 请使用数学模式进行数学表达式,即,
xlabel={$x$}
而不是xlabel={x}
。 - 不要在子图中使用不同的字体(属性)。