我正在使用 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}