如何将 pgfplots 生成的图与背景 TikZ 网格对齐?

如何将 pgfplots 生成的图与背景 TikZ 网格对齐?

考虑以下代码:

\documentclass{standalone}

\usepackage{tikz}
\usepackage{pgfplots}
\usetikzlibrary{plotmarks}

\begin{document}
    \begin{tikzpicture}
        \draw[<->] (0,5) node[left] {$x$} -- (0,0) --  (5,0) node[below] {$r$};

        \begin{axis}[axis lines = none]
            \addplot[samples=50]{sqrt(x)};
        \end{axis}
    \end{tikzpicture}
\end{document}

它产生以下输出:

在此处输入图片描述

我想将 sqrt(x) 函数的起点与轴线的交点对齐。我该怎么做?

下面的 Paul 建议我将 Draw 移动到轴环境内,得到以下输出:

在此处输入图片描述

虽然不是我所期望的,但更接近了!网格是如何通过轴环境改变的?

我需要一个这个问题的答案,因为我希望制作出这样的图片,其中蓝线是由pgfplots——请参阅这个问题的答案了解我如何制作这幅图像生成的: 在此处输入图片描述

答案1

我建议采用 Paul Gessler 在其回答中提出的方式。但如果出于某种原因您需要自己绘制轴线,或者绘制与图表相关的任何内容,则有以下可能性:

正如评论中所建议的,您应该\draw在轴环境内移动。但是您必须指定要相对于哪个坐标系指定点。有:

  • axis cs:轴坐标系
  • rel axis cs:相对坐标系,其中完整的轴向量被规范化为 1
  • axis direction cs:允许使用相对位置和方向
  • axis description cs:对于(当然)轴描述很有用
  • ticklabel cs:,,,用于xticklabel cs:定位刻度标签yticklabel cs:zticklabel cs:
  • xticklabel* cs:、、yticklabel cs:zticklabel cs:无星号版本相同,但不考虑任何刻度标签的大小

甚至可能更多...通常你需要axis cs:,它允许你轻松地在轴内绘制和放置节点。你可以在坐标系中指定坐标,例如

(axis cs:1,2)

注意:从 pgfplots v1.11 开始,axis cs:是标准坐标系,因此您可以省略axis cs:并简单地写例如(1,2)。但如果我正确理解了您的问题,则您的系统上的情况并非如此。

在轴内绘图时,添加clip=false轴选项通常很有用,这样您就可以在指定的轴范围之外绘图而不会被剪裁。

您的 MWE 将是

\documentclass{standalone}

\usepackage{tikz}
\usepackage{pgfplots}
\usetikzlibrary{plotmarks}

\begin{document}
    \begin{tikzpicture}
        \begin{axis}[axis lines = none,clip=false]
            \addplot[samples=50,domain=0:5]{sqrt(x)};
            \draw[<->] (axis cs:0,3) node[left] {$x$} -- (axis cs:0,0 ) -- (axis cs:5,0) node[below] {$r$};
        \end{axis}
    \end{tikzpicture}
\end{document}

并创造

MWE 的输出

答案2

一个主要目的pgfplots是让绘制轴变得简单,那么为什么只为这一部分而使用 TikZ 呢?这里的样式设置可以合并在一起style并在整个文档中重复使用。然后,如果您决定更改样式,则只需更新代码中的一个位置即可。

另一个注意事项:默认绘图域是 [-5,5],因此 50 个样本中有一半会被丢弃(复杂结果)。我这样设置,domain=0:5这样您就可以获得分布在您实际绘图区域内的 50 个所需样本。

\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.11}

\begin{document}
\begin{tikzpicture}
  \begin{axis}[
    axis lines = middle,
    xtick=\empty,ytick=\empty,
    xlabel=$r$,ylabel=$x$,
    every axis x label/.style={at={(current axis.right of origin)},anchor=north},
    every axis y label/.style={at={(current axis.above origin)},anchor=east},
  ]
    \addplot[samples=50,domain=0:5]{sqrt(x)};
  \end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容