TikZ/pgfplots:如何使 tikzpcture 适合父图/子图浮动环境?

TikZ/pgfplots:如何使 tikzpcture 适合父图/子图浮动环境?

在这个 MWE 中,我如何才能使其适合父浮动环境(或)tikzpicture的分配空间?figuresubfigure

\RequirePackage{luatex85}
\documentclass{article}
\usepackage{pgfplots,caption,subcaption,mwe}

\pgfplotsset{compat=newest}

\begin{document}

\begin{figure}
    \begin{subfigure}[t]{0.3\textwidth}
        \begin{tikzpicture}
            \begin{axis}[enlargelimits=false]
                \addplot graphics [
                    xmin=0,
                    xmax=50,
                    ymin=0,
                    ymax=150,
                ] {example-image-a};
            \end{axis}
        \end{tikzpicture}
    \end{subfigure}
    %
    \begin{subfigure}[t]{0.3\textwidth}
        \begin{tikzpicture}
            \begin{axis}[enlargelimits=false]
                \addplot graphics [
                    xmin=0,
                    xmax=50,
                    ymin=0,
                    ymax=150,
                ] {example-image-b};
            \end{axis}
        \end{tikzpicture}
    \end{subfigure}
    %
    \begin{subfigure}[t]{0.3\textwidth}
        \begin{tikzpicture}
            \begin{axis}[enlargelimits=false]
                \addplot graphics [
                    xmin=0,
                    xmax=50,
                    ymin=0,
                    ymax=150,
                ] {example-image-c};
            \end{axis}
        \end{tikzpicture}
    \end{subfigure}
\end{figure}

\end{document}

在此处输入图片描述


编辑

下面代码的输出并没有使得子图跨越所有,\textwidth尽管每个子图的宽度都等于0.33\textwidth

\begin{figure}
    \centering
    \begin{subfigure}[t]{0.33\textwidth}
        \begin{tikzpicture}
            \begin{axis}[enlargelimits=false,width=\textwidth]
                \addplot graphics [
                    xmin=0,
                    xmax=50,
                    ymin=0,
                    ymax=150,
                ] {example-image-a};
            \end{axis}
        \end{tikzpicture}
    \end{subfigure}
    %
    \begin{subfigure}[t]{0.33\textwidth}
        \begin{tikzpicture}
            \begin{axis}[enlargelimits=false,width=\textwidth]
                \addplot graphics [
                    xmin=0,
                    xmax=50,
                    ymin=0,
                    ymax=150,
                ] {example-image-b};
            \end{axis}
        \end{tikzpicture}
    \end{subfigure}
    %
    \begin{subfigure}[t]{0.33\textwidth}
        \begin{tikzpicture}
            \begin{axis}[enlargelimits=false,width=\textwidth]
                \addplot graphics [
                    xmin=0,
                    xmax=50,
                    ymin=0,
                    ymax=150,
                ] {example-image-c};
            \end{axis}
        \end{tikzpicture}
    \end{subfigure}
\end{figure}

\lipsum[1]

在此处输入图片描述

答案1

第三个子图之所以出现在单独的一行上,是因为子图之间有一个空格。代码中的换行符与空格相同,因此你需要%在 之后添加一个\end{subfigure}。即,而不是

\end{subfigure}
%
\begin..

你需要

\end{subfigure}%
%
\begin..

或者

\end{subfigure}%
\begin..

例如%行末百分号 ( ) 有什么用?

第二个问题是widtha 的键 pgfplots axis实际上并不准确。它pgfplots假设刻度标签和轴标签占据轴本身之外 45pt 的空间。因此,它采用指定的宽度,减去 45pt,并将此宽度用于轴。

您不能将 45pt 更改为其他值,但您可以计算自己的轴宽度,并使用该scale only axis键表示该width参数适用于轴,而忽略刻度标签/轴标签。

一个更粗暴的方法是将整个图放入tikzpicture一个 中\resizebox,然后简单地将其缩放到子图的宽度。 问题是字体也会被调整大小。

最后,请注意,如果您没有这些内容的标题,那么这些subfigure环境就毫无意义,可以被丢弃。

第一行显示了的效果\resizebox,第二行我使用了计算的轴宽度,第三行也使用了相同的宽度,但没有subfigure环境。该showframe包在文本区域周围打印了一个框架,这些是屏幕截图中看到的线条:

在此处输入图片描述

\RequirePackage{luatex85}
\documentclass{article}
\usepackage{pgfplots,subcaption,showframe}

\pgfplotsset{compat=newest}

\begin{document}
\begin{figure}
    \centering
    \begin{subfigure}[t]{0.33\textwidth}
        \resizebox{\textwidth}{!}{\begin{tikzpicture}
            \begin{axis}[enlargelimits=false,width=\textwidth]
                \addplot graphics [
                    xmin=0,
                    xmax=50,
                    ymin=0,
                    ymax=150,
                ] {example-image-a};
            \end{axis}
        \end{tikzpicture}}
    \end{subfigure}%
    %
    \begin{subfigure}[t]{0.33\textwidth}
        \resizebox{\textwidth}{!}{\begin{tikzpicture}
            \begin{axis}[enlargelimits=false,width=\textwidth]
                \addplot graphics [
                    xmin=0,
                    xmax=50,
                    ymin=0,
                    ymax=150,
                ] {example-image-b};
            \end{axis}
        \end{tikzpicture}}
    \end{subfigure}%
    %
    \begin{subfigure}[t]{0.33\textwidth}
        \resizebox{\textwidth}{!}{\begin{tikzpicture}
            \begin{axis}[enlargelimits=false,width=\textwidth]
                \addplot graphics [
                    xmin=0,
                    xmax=50,
                    ymin=0,
                    ymax=150,
                ] {example-image-c};
            \end{axis}
        \end{tikzpicture}}
    \end{subfigure}

    \pgfmathsetlengthmacro{\myaxiswidth}{0.33\textwidth-width(" 150 ")}% subtract width of widest ticklabel, with a space on each side
    \begin{subfigure}[t]{0.33\textwidth}
        \begin{tikzpicture}
            \begin{axis}[enlargelimits=false,width=\myaxiswidth,scale only axis]
                \addplot graphics [
                    xmin=0,
                    xmax=50,
                    ymin=0,
                    ymax=150,
                ] {example-image-a};
            \end{axis}
        \end{tikzpicture}
    \end{subfigure}%
    %
    \begin{subfigure}[t]{0.33\textwidth}
        \begin{tikzpicture}
            \begin{axis}[enlargelimits=false,width=\myaxiswidth,scale only axis]
                \addplot graphics [
                    xmin=0,
                    xmax=50,
                    ymin=0,
                    ymax=150,
                ] {example-image-b};
            \end{axis}
        \end{tikzpicture}
    \end{subfigure}%
    %
    \begin{subfigure}[t]{0.33\textwidth}
        \begin{tikzpicture}
            \begin{axis}[enlargelimits=false,width=\myaxiswidth,scale only axis]
                \addplot graphics [
                    xmin=0,
                    xmax=50,
                    ymin=0,
                    ymax=150,
                ] {example-image-c};
            \end{axis}
        \end{tikzpicture}
    \end{subfigure}


        \begin{tikzpicture}
            \begin{axis}[enlargelimits=false,width=\myaxiswidth,scale only axis]
                \addplot graphics [
                    xmin=0,
                    xmax=50,
                    ymin=0,
                    ymax=150,
                ] {example-image-a};
            \end{axis}
        \end{tikzpicture}%
        \begin{tikzpicture}
            \begin{axis}[enlargelimits=false,width=\myaxiswidth,scale only axis]
                \addplot graphics [
                    xmin=0,
                    xmax=50,
                    ymin=0,
                    ymax=150,
                ] {example-image-b};
            \end{axis}
        \end{tikzpicture}%
        \begin{tikzpicture}
            \begin{axis}[enlargelimits=false,width=\myaxiswidth,scale only axis]
                \addplot graphics [
                    xmin=0,
                    xmax=50,
                    ymin=0,
                    ymax=150,
                ] {example-image-c};
            \end{axis}
        \end{tikzpicture}

\end{figure}

\end{document}

相关内容