如何让 tikzpicture 占据整个\linewidth
,同时使左右轴对齐?我怀疑\phantom
在刻度标签上应用一些间距会起作用,但不知道如何做到这一点。
\documentclass{article}
\usepackage{pgfplots}
\pgfkeys{/pgfplots/MyAxisStyle/.style={xmin=0,xmax=5, ymin=0,ymax=3,height=6cm,width=\linewidth}}
\pgfkeys{/pgfplots/MyLineStyle/.style={samples=50, smooth, ultra thick}}
\begin{document}
\begin{minipage}{0.9\linewidth}\centering
\hrule% To see actual \linewidth
\medskip
\begin{tikzpicture}
\begin{axis}[MyAxisStyle, xmax=10, ymax=110]
\addplot[MyLineStyle, domain=0:10, ,red] {(x^2)} node [left] {$y=x^2$};
\end{axis}
\end{tikzpicture}
\end{minipage}
\begin{minipage}{0.9\linewidth}\centering
\begin{tikzpicture}
\begin{axis}[MyAxisStyle, xmax=2,ymax=9]
\addplot[MyLineStyle, domain=0:2 ,green] {(x)^3} node [left] {$y=x^3$};
\end{axis}
\end{tikzpicture}
\end{minipage}
\begin{minipage}{0.9\linewidth}\centering
\begin{tikzpicture}
\begin{axis}[MyAxisStyle, width=0.5\linewidth]
\addplot[MyLineStyle, domain=0:5, blue] {sqrt(x)} node [above left] {$y=\sqrt{x}$};
\end{axis}
\end{tikzpicture}\hfill
\begin{tikzpicture}
\begin{axis}[MyAxisStyle, height=4cm,width=0.5\linewidth]
\addplot[MyLineStyle, domain=0:5, blue] {sqrt(x)} node [above left] {$y=\sqrt{x}$};
\end{axis}
\end{tikzpicture}
\hrule% To see actual \linewidth
\end{minipage}
\end{document}
请注意,在图 1 和图 2 中,y 轴未对齐,并且它们没有完全占据\linewidth
水平规则所示的全部空间。
另外,在最后两张图表上我应用了width=0.5\linewidth
,预计\hfill
不会产生任何效果,但最终在两张图表之间出现了明显的水平空间。
我没有使用figure
环境,因为我不想让它们浮动,因此我使用\minipage
并应用\centering
。
我不想使用使用相对定位时将 TikZ 图形缩放到线宽因为这样也会缩放文本,我也不想像如何将 tikzpicture 缩放到 \textwidth而是让图表使用整个宽度
答案1
PGFplots 必须估计标签所占用的空间,这并不容易,并且可能导致绘图的大小与使用 指定的大小不同width
。在这种情况下,我将使用选项scale only axis
,该选项仅将width
和height
选项应用于轴,而不是包括标签在内的整个绘图。
虽然这意味着您必须手动选择width
比整体预期绘图宽度略小的宽度,但它使绘图的对齐变得容易得多,因为您现在知道两个大绘图轴具有相同的宽度。
要对齐不同的图,您应将它们放在相同的 中tikzpicture
,使用 命名图name
,并使用at=(<other plot name>.below south east), anchor=(north east)
或类似名称定位它们。锚点south
、south east
等表示轴上的点,锚点below south east
、right of south east
等表示轴上的点在图的边界框上的投影。
\documentclass{article}
\usepackage{pgfplots}
\pgfkeys{/pgfplots/MyAxisStyle/.style={xmin=0,xmax=5, ymin=0,ymax=3,height=4cm,width=0.9\linewidth,scale only axis}}
\pgfkeys{/pgfplots/MyLineStyle/.style={samples=50, smooth, ultra thick}}
\begin{document}
\begin{minipage}{0.9\linewidth}\centering
\hrule% To see actual \linewidth
\medskip
\begin{tikzpicture}
\begin{axis}[MyAxisStyle, xmax=10, ymax=110,scale only axis,name=first]
\addplot[MyLineStyle, domain=0:10, ,red] {(x^2)} node [left] {$y=x^2$};
\end{axis}
\begin{axis}[MyAxisStyle, xmax=2,ymax=9,
at=(first.below south west),
anchor=north west,
yshift=-0.25cm,
name=second]
\addplot[MyLineStyle, domain=0:2 ,green] {(x)^3} node [left] {$y=x^3$};
\end{axis}
\begin{axis}[MyAxisStyle,
width=0.4\linewidth,
at=(second.below south west),
anchor=north west,
yshift=-0.25cm,
name=third]
\addplot[MyLineStyle, domain=0:5, blue] {sqrt(x)} node [above left] {$y=\sqrt{x}$};
\end{axis}
\begin{axis}[MyAxisStyle, height=3cm,width=0.4\linewidth,
at=(second.east|-third.outer south east),
anchor=outer south east
]
\addplot[MyLineStyle, domain=0:5, blue] {sqrt(x)} node [above left] {$y=\sqrt{x}$};
\end{axis}
\end{tikzpicture}
\hrule% To see actual \linewidth
\end{minipage}
\end{document}