将三个 tikz 图片并排放置在单个 y 轴上时间距均匀

将三个 tikz 图片并排放置在单个 y 轴上时间距均匀

我试图将三个图形并排放置。然后这些图形可以使用相同的 y 轴标签来节省空间。我遇到的问题是我必须手动放置图形之间的空间。例如,反复更改值并测量以确保它们间距相等。其次,标题 (a) 的位置位于其图形下方的中心,但与其他两个不匹配。

我尝试过 \hspace 和 \hfill 的许多不同组合,但似乎无法让任何东西正常工作。然后是另一个问题(我没有提供代码以保持帖子简短),当添加 tikz 图例时,第一个图形会略微垂直移动。这是在使用相同代码但添加\addlegendimage和时\addlegendentry

这是该问题的图片: 图片展示问题

这是我的代码的MWE:

\documentclass{article}
\usepackage{graphicx}
\usepackage{pgfplots}
\usepackage[]{subcaption}

\begin{document}

\begin{figure}
\centering
    \subcaptionbox{\centering}[0.33\textwidth]{\input{picture_with_label.tikz}}%
        \subcaptionbox{\centering}[0.33\textwidth]{\input{picture.tikz}}%
        \subcaptionbox{\centering}[0.33\textwidth]{\input{picture.tikz}}
\caption{A long caption describing all the figures.}
\end{figure} 
\end{document}

tikz 图片是:

\begin{tikzpicture}

\begin{axis}[
height=\linewidth,
width=\linewidth,
ymajorticks = false,
]
\addplot [draw=black, fill=black, mark=*, only marks,mark size=1pt]
table{%
x  y
0.459039921422644 0.491633026121641
0.485966183237016 0.502572005351635
};

\end{axis}

\end{tikzpicture}

带标签的图片的唯一区别是,下面的行被替换为 。ylabel={y}代替ymajorticks = false

答案1

这看起来像是 groupplots 的工作(pgfplots 手册中的第 5.8 节)。

\documentclass{article}
\usepackage{graphicx}
\usepackage{pgfplots}
\usepackage[]{subcaption}

\usepgfplotslibrary{groupplots}

\usepackage{showframe}% alignment tool

\begin{document}

\begin{figure}
\centering
\begin{tikzpicture}
\begin{groupplot}[group style={columns=3, horizontal sep=\columnsep},
  width=0.26\textwidth,
  scale only axis,
  xlabel={\parbox[t]{0.26\textwidth}{\subcaption{}}}]% overkill

\nextgroupplot[ylabel={y}]% xlabel={(a)}
\addplot [draw=black, fill=black, mark=*, only marks,mark size=1pt]
table{%
x  y
0.459039921422644 0.491633026121641
0.485966183237016 0.502572005351635
};

\nextgroupplot[ymajorticks=false]% xlabel={(b)}
\addplot [draw=black, fill=black, mark=*, only marks,mark size=1pt]
table{%
x  y
0.459039921422644 0.491633026121641
0.485966183237016 0.502572005351635
};
\nextgroupplot[ymajorticks=false]% xlabel={(c)}
\addplot [draw=black, fill=black, mark=*, only marks,mark size=1pt]
table{%
x  y
0.459039921422644 0.491633026121641
0.485966183237016 0.502572005351635
};
\end{groupplot}
\end{tikzpicture}
\caption{A long caption describing all the figures.}
\end{figure} 
\end{document}

演示

答案2

虽然我不会走你的路,但这是其中一种方法。

首先,减少图内的宽度,这是我通过反复试验(即迭代)获得的:

% picture.tikz.tex

\begin{tikzpicture}
\begin{axis}[
height=.4\linewidth,
width=.4\linewidth,% <<<<<<<<<<<<<<<
ymajorticks = false,
]
\addplot [draw=black, fill=black, mark=*, only marks,mark size=1pt]
table{%
x  y
0.459039921422644 0.491633026121641
0.485966183237016 0.502572005351635
};

\end{axis};
\end{tikzpicture}

% picture_with_label-tikz.tex

\begin{tikzpicture}
\begin{axis}[
height=.4\linewidth,
width=.4\linewidth,% <<<<<<<<<<<
ylabel={y}
]
\addplot [draw=black, fill=black, mark=*, only marks,mark size=1pt]
table{%
x  y
0.459039921422644 0.491633026121641
0.485966183237016 0.502572005351635
};

\end{axis};
\end{tikzpicture}

第二,使用subfigure

\documentclass{article}
\usepackage{pgfplots}
\usepackage{subfigure}

\begin{document}

\begin{figure}
    \centering
    \subfigure[a.plot]{\input{picture_with_label.tikz}} 
    \subfigure[b-plot]{\input{picture.tikz}}    
    \subfigure[c-plot]{\input{picture.tikz}}    
    
\caption{A long caption describing all the figures.}
\end{figure} 

%\tikz{
%   \matrix{
%       \input{picture_with_label.tikz} &
%       \input{picture.tikz} &
%       \input{picture.tikz}\\  
%   };
%}

\end{document}

结果

下面注释的部分显示了 tikz 的方式。例如,您可以在那里设置列 sep 作为选项。要使其工作,请在您的 plotfiles 中删除\begin\end{tikzpicture}。当然,您需要将和和放入\nodes {};模仿子标题,并自己照顾图形计数器 ;-)

\matrix对于 tikz 来说\tabular,就如同对于 Latex 一样,因此它们使用相同的语法。例如,子 cap 行可以读取此矩阵环境中的内容:

\node {a-plot}; & \node {b-plot}; & \node {c-plot}; \\ 

观察;,因为每个单元格都是一个有效的 tikz 语句。

相关内容