如何在LaTeX中对齐两个tikzpicture图表

7

我正在尝试使用在https://www.latex-tutorial.com/tutorials/figures/上展示的subfigure方法制作并排图,但是我似乎无法调整大小并让它们并排显示...我做错了什么吗? 以下是我正在使用的代码

\begin{figure}
        \centering
        \begin{subfigure}[b!]{0.3\textwidth}
            \begin{tikzpicture}
                \begin{axis}[
                    axis y line = middle,
                    axis x line = middle,
                    xlabel = $x$,
                    ylabel = {$f(x) = x^3$},
                    grid=major,
                ]
                \addplot [
                    domain=-3:3, 
                    samples=100, 
                    color=red,
                ]
                {x^3};
                \addlegendentry{$x^3$}
                %
                \addplot [
                    domain=-3:3, 
                    samples=100, 
                    color=blue,
                    ]
                    {x^3 + 3};
                \addlegendentry{$x^3 + 3$}
                 %
                \addplot [
                    domain=-3:3, 
                    samples=100, 
                    color=green,
                    ]
                    {x^3 - 3};
                \addlegendentry{$x^3 - 3$}
                \end{axis}
            \end{tikzpicture}
        \end{subfigure}
        %\hfill
        \begin{subfigure}[b]{0.3\textwidth}
            \begin{tikzpicture}
                \begin{axis}[
                    axis y line = middle,
                    axis x line = middle,
                    xlabel = $x$,
                    ylabel = {$f(x) = x^3$},
                    grid=major,
                ]
                \addplot [
                    domain=-3:3, 
                    samples=100, 
                    color=red,
                ]
                {x^3};
                \addlegendentry{$x^3$}
                \end{axis}
            \end{tikzpicture}
        \end{subfigure}
        \caption{lajsdfls}
    \end{figure}
1个回答

7

您的代码存在两个问题。

首先,图像的水平对齐不正确,但是这可以通过使用

\begin{subfigure}[b]{0.3\textwidth}

替代

\begin{subfigure}[b!]{0.3\textwidth}

关于宽度,创建子图环境时会创建一个指定宽度的 minipage。但是,您需要根据内容来尊重此宽度,不会进行任何重新缩放。例如,在子图中,如果您将图像的宽度设置为\linewidth,则宽度将得到尊重。但是,如果您给这个图像一个15cm的宽度,可能会比您的 minipage 更大。但 LaTeX 将尊重您的指令(并指示 hbox 长度过长)。这就是您面临的问题。您的图表太大并且重叠。有两种方法可以解决这个问题。首先,您可以给轴环境一个 width=\linewidth 的参数,但通常需要重新设计您的图表。其次,您可以使用 adjustbox 包来调整 tikz 创建的框的大小。
\documentclass{article}

\usepackage{subcaption}
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{adjustbox}

\begin{document}

\begin{figure}
  \centering
  \begin{subfigure}[b]{0.45\textwidth}
%%%    \begin{adjustbox}{width=\linewidth} % rescale box
    \begin{tikzpicture}
      \begin{axis}[
%%%        width=\linewidth,            % or modify the plot width
        axis y line = middle,
        ...
        ...
      \end{axis}
    \end{tikzpicture}
%%%  \end{adjustbox}       %
\end{subfigure}%
   \hfill
  \begin{subfigure}[b]{0.45\textwidth}
etc.

将轴环境添加一个宽度参数

enter image description here

使用 adjustbox 进行重新缩放

enter image description here

顺便说一句,如果您不打算为图表添加子标题,则子图环境是无用的,您可以将(正确缩放的)tikzpictures 并排放置,之间用 \hfill 分隔。


谢谢,您能否再解释一下0.4\linewidth在子图中的作用,以及与轴上的区别等等?我昨天才开始使用latex,所以有点迷茫。谢谢。 - someone serious
我确实使用了 adjust box,它能正常工作,现在我正在尝试让整个图片置于页面顶部……我通过 \begin{figure}[H] 完成了这个需求。 - someone serious

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接