带 trim 的 subfloat 和 pgfplot

带 trim 的 subfloat 和 pgfplot

我正在使用 subfloat 和 pgfplot 将两个图并排放置。我希望 subfloat 标题与轴对齐,因此我使用 trim axis。但是我的图标签超出了边距。

\begin{figure}
\centering
\subfloat[Fig 1]{
    \begin{tikzpicture}[trim axis left,trim axis right]
        \begin{axis}[
            grid=major,
            scaled ticks=false,
            x post scale={0.8},
            y post scale={1.25},
            xmin=1,xmax=5,
            ymin=0,ymax=0.07,
            tick label style={/pgf/number format/fixed},
            ylabel style={rotate=-90},
            xlabel={r},
            ylabel={$\displaystyle \frac{V_{test}}{V_{x}}$},
            legend cell align=left,
            legend entries={,$\Psi=0$,,$\Psi=2\pi$,,$\Psi=4\pi$}
        ]   

            \addplot [thick, blue] table [col sep=comma] {test.csv};
        \end{axis}
    \end{tikzpicture}
}
\hfill
\subfloat[Fig 2]{
    \begin{tikzpicture}[trim axis left,trim axis right]
        \begin{axis}[
            grid=major,
            scaled ticks=false,
            x post scale={0.8},
            y post scale={1.25},,
            xmin=1,xmax=5,
            ymin=0,ymax=0.07,
            tick label style={/pgf/number format/fixed},
            ylabel style={rotate=-90},
            xlabel={r},
            ylabel={$\displaystyle \frac{V_{test}}{V_{x}}$},
            legend cell align=left,
            legend entries={,$\Psi=0$,,$\Psi=2\pi$,,$\Psi=4\pi$}
        ]   
            \addplot [thick, olive] table [col sep=comma] {test.csv};
        \end{axis}
    \end{tikzpicture}
}   
\caption{Sample image}
\end{figure}

在此处输入图片描述

是否可以在不指定尺寸水平对齐的情况下修复它?因为我有很多图,所以这会很繁琐。

答案1

替换\hfill宽度\hfil

在此处输入图片描述

这样,边界框就会位于页面宽度的中心,但是y标签不会被视为居中(因为trim axis left被排除在外)。

上图的测试代码是(不幸的是,您的代码片段毫无用处):

\documentclass{article}
\usepackage{subfig}
\usepackage{pgfplots}
\pgfplotsset{compat=1.13, width=77mm}

\usepackage[showframe]{geometry}% to show page layout

\begin{document}
    \begin{figure}[ht]
\pgfplotsset{
    grid=major,
    scaled ticks=false,
    x post scale={0.8},
    y post scale={1.25},
    legend cell align=left,
    legend pos=south east
            }
    \centering
\subfloat[Fig. 1]{
\begin{tikzpicture}[baseline,trim axis left]
\begin{axis}[
ylabel={$f(x)=x^2$}
            ]
\addplot {x};
\legend{$x$},
\end{axis}
\end{tikzpicture}
                }
    \hfil
\subfloat[Fig. 2]{
\begin{tikzpicture}[baseline,trim axis left]
\begin{axis}[
ylabel={$f(x)=x^2$}
            ]
\addplot {x^2};
\legend{$x^2$},
\end{axis}
\end{tikzpicture}
                }
\caption{Sample image}
    \end{figure}
\end{document}

答案2

此解决方案在右侧添加了额外的空间,以tikzpicture使轴框(而不是边界框)居中。它使用name=轴选项来定位边缘。

这与使用的主要区别trim axis left在于当图太宽时。如您所见,它已经将第二个子浮点强制移到新行。我在子浮点周围放置了框架以显示其大小。

注意:这是基于 Zarlo 的 MWE。我尝试使用你的,但它真的没用。

\documentclass{article}
\usepackage{subfig}
\usepackage{pgfplots}
\pgfplotsset{compat=1.13, width=77mm}

\newlength{\offset}
\newlength{\temp}

\usepackage[showframe]{geometry}% to show page layout
\begin{document}
\begin{figure}[ht]
\pgfplotsset{
    grid=major,
    scaled ticks=false,
    x post scale={0.8},
    y post scale={1.25},
    legend cell align=left,
    legend pos=south east
            }
\centering\fbox{%
\subfloat[Fig. 1]{
\begin{tikzpicture}[baseline]
\begin{axis}[name=border,
ylabel={$f(x)=x^2$}
            ]
\addplot {x};
\legend{$x$}
\end{axis}
\pgfextractx{\offset}{\pgfpointdiff{\pgfpointanchor{current bounding box}{west}}%
  {\pgfpointanchor{border}{west}}}% \pgfpointorigin will do
\pgfextractx{\temp}{\pgfpointdiff{\pgfpointanchor{current bounding box}{east}}%
  {\pgfpointanchor{border}{east}}}% only about -0.2pt
\global\advance\offset by \temp
\end{tikzpicture}\hspace{\offset}% add excess left margin to right
                }}%
\hfill\fbox{%
\subfloat[Fig. 2]{
\begin{tikzpicture}[baseline]
\begin{axis}[name=border,
ylabel={$f(x)=x^2$}
            ]
\addplot {x^2};
\legend{$x^2$}
\end{axis}
\pgfextractx{\offset}{\pgfpointdiff{\pgfpointanchor{current bounding box}{west}}
  {\pgfpointanchor{border}{west}}}%
\pgfextractx{\temp}{\pgfpointdiff{\pgfpointanchor{current bounding box}{east}}%
  {\pgfpointanchor{border}{east}}}%
\global\advance\offset by \temp
\end{tikzpicture}\hspace{\offset}
                }}
\caption{Sample image}
    \end{figure}
\end{document}

文本区域

相关内容