PGFplot 占据整个 \linewidth,并与 tikzpicture 上的 y=轴对齐

PGFplot 占据整个 \linewidth,并与 tikzpicture 上的 y=轴对齐

如何让 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,该选项仅将widthheight选项应用于轴,而不是包括标签在内的整个绘图。

虽然这意味着您必须手动选择width比整体预期绘图宽度略小的宽度,但它使绘图的对齐变得容易得多,因为您现在知道两个大绘图轴具有相同的宽度。

要对齐不同的图,您应将它们放在相同的 中tikzpicture,使用 命名图name,并使用at=(<other plot name>.below south east), anchor=(north east)或类似名称定位它们。锚点southsouth east等表示轴上的点,锚点below south eastright 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}

相关内容