上面的tikzpicture
图主要是根据以下代码创建的:在 TeX 中创建 xkcd 样式图。我通过反复试验找到了点和标签。有什么更好的选择吗?要创建整个图,我应该使用draw
命令吗?
因为我注意到xtick={},ytick={}
没有删除轴刻度标记,所以我只在每个轴上放了两个标记,用点 O、S 和 R 隐藏它们。还有其他更好的方法吗?
如您所见,蓝色曲线 y=f(x) 并不像它应该的那样完全平滑。我认为这可能是由于求小数的平方根时不准确造成的。可以解决这个问题吗?
以下是我使用的代码:
\documentclass{standalone}
\usepackage{amsfonts}
\usepackage{amsmath}
\usepackage{pgfplots}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\pgfplotsset{every axis/.append style={line width=0.9pt}}
\begin{axis}[
axis x line=middle,
axis y line=middle,
ymax=2.2, ylabel=$y$,
xlabel=$x$,
xtick={0,3},
ytick={0,2},
xticklabels={},
yticklabels={}
]
\addplot[domain=0:3, blue, thick] {sqrt(x^3/27)-sqrt(3*x)+2};
\addplot[domain=0:1.5, red, thick] {-(x/4+7/8)*sqrt(2)+2};
\addplot[domain=0:3.2, black, thin] {0};
\end{axis}
\node at (-0.25,-0.25) {$O$};
\node at (3.4,0.9) {$P(x,y)$};
\node at (-0.7,2) {$Q(0,ut)$};
\node at (-0.7,5.1) {$R(0,uT)$};
\node at (6.7,-0.3) {$S(L,0)$};
\node at (2.4,1.8) {$y=f(x)$};
\node at (4.8,0.4) {$s=vt$};
\fill(0,0) circle (2pt);
\fill[blue](0,5.15) circle (2pt);
\fill[blue](3.2,0.6) circle (2pt);
\fill(0,2) circle (2pt);
\fill[blue] (6.4,0) circle (2pt);
\end{tikzpicture}
\end{document}
编辑:在原点处添加点,并将 QI 添加到 percusse 的代码中
\addplot [only marks,mark=*] coordinates { (0,0) (0,0.76) };
\node[below left] at (axis cs:0,0) {$O$};
之前\end{axis}
。最后一行应该输入原点,正如 percusse 所评论的那样,但由于某种我不知道的原因,它不起作用。我的初始代码\node at (-0.25,-0.25) {$O$};
之后\end{axis}
确实输入了 O。
答案1
正如您所猜测的,pgfplots
它提供了与 TikZ 类语法的紧密集成。我列出了几种不同类型的操作,以便您可以选择自己喜欢的。
首先,轴坐标系更便于放置物体,您可以(axis cs:xcoord,ycoord)
像我使用节点一样使用轴坐标系访问该坐标系。此外,在放置命令P(x,y)
结尾之前,您可以将节点放置为 TikZ 路径(它实际上是但仍然不是平凡的方式)。最好将标记放置为单独的图,并提供坐标,然后是标记类型等。最后,我删除了每个标签并通过键添加了自定义刻度标签。;
addplot
only marks
extra ticks
extra tick labels
\documentclass{standalone}
\usepackage{amsfonts}
\usepackage{amsmath}
\usepackage{pgfplots}
\pgfplotsset{compat=1.7}
\begin{document}
\begin{tikzpicture}
\pgfplotsset{every axis/.append style={line width=0.9pt}}
\begin{axis}[
axis x line=middle,
axis y line=middle,
ymax=2.2,xmax=3.2,
tick style={draw=none},
ylabel=$y$, xlabel=$x$,
xticklabels=\empty,
yticklabels=\empty,
extra y ticks={0.76256,2},
extra y tick labels={ ${Q(0,ut)}$ , ${R(0,uT)}$ },
extra x ticks={3.0},
extra x tick labels={ ${S(L,0)}$ },
]
\addplot[domain=0:3, samples=100,blue, thick] {sqrt(x^3/27)-sqrt(3*x)+2}
node[pos=0.3,above right] {$y=f(x)$} node[near end,above right] {$s=vt$};
\addplot[domain=0:1.5, red, thick] {-(x/4+7/8)*sqrt(2)+2};
\addplot [only marks,mark=*,blue] coordinates { (0,2) (1.5,0.23) (3,0)};
\node[above=2mm,blue] at (axis cs:1.5,0.23) {${P(x,y)}$};
\end{axis}
\end{tikzpicture}
\end{document}
抱歉0.23
,我只是通过视觉猜测而已。
编辑:您也可以通过键增加样本数量samples=n
。请参阅相关图表。