考虑以下代码:
\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:
相对坐标系,其中完整的轴向量被规范化为 1axis 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}
并创造
答案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}