为了运行此代码,您需要安装gnuplot
。此外,您必须让您的编辑器/工作流程确保选项--shell-escape
已传递给 pdflatex,以便 TikZ 可以调用gnuplot
。
这是一个最小(非)工作示例:
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw[<->] (0,5) node[left] {$x$} -- (0,0) -- (5,0) node[below] {$r$};
\draw[thick, blue, domain=-5:5, range=0:5, samples = 50, smooth] plot[id=s1] function{-1*sqrt(x) + 1};
\draw[thick, blue, domain=-5:5, samples = 50, smooth] plot[id=s2] function{sqrt(x) + 1};
\draw[thick, blue, domain=-5:5] plot[id=s3] function{0};
\end{tikzpicture}
\end{document}
请注意,坐标轴(由绘制\draw[<->] (0,5) node[left] {$x$} -- (0,0) -- (5,0) node[below] {$r$};
)是在标准 TikZ“背景网格”上绘制的。运行代码,您会看到平方根的两个分支不是从同一位置开始的(应该从(0,1)开始),所以我说它们相对于背景 TikZ 网格未对齐(它们的(0,1)与背景网格的(0,1)不一样)。
但是,如果我删除样本参数,它们就会相对于背景网格正确对齐。我不喜欢较粗的曲线,因为它不能正确显示 (1, 0) 处的交点。
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw[<->] (0,5) node[left] {$x$} -- (0,0) -- (5,0) node[below] {$r$};
\draw[thick, blue, domain=-5:5, range=0:5, smooth] plot[id=s1] function{-1*sqrt(x) + 1};
\draw[thick, blue, domain=-5:5, smooth] plot[id=s2] function{sqrt(x) + 1};
\draw[thick, blue, domain=-5:5] plot[id=s3] function{0};
\end{tikzpicture}
\end{document}
我怎样才能得到平滑的曲线以及正确的对齐方式?pgfplots
如果我能弄清楚如何将生成的图pgfplots
与背景 TikZ 图片对齐(因此,这也是我放入标签的原因pgfplots
),我愿意使用。这不是我运气好的事情,但gnuplot
在这方面已经解决了问题(除了当前问题)。
答案1
与图表相比,背景没有错位。相反,样本没有捕捉到点 $r = 0$。为了绕过这个问题,最好手动指定应该在哪里采样,就像这样(请注意如何使用\foreach
(即...
)符号指定样本点:
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw[<->] (0,5) node[left] {$x$} -- (0,0) -- (5,0) node[below] {$r$};
\draw[thick, blue, domain=-5:5, samples at = {-5,4.95,...,1}, smooth] plot[id=s1] function{-1*sqrt(x) + 1};
\draw[thick, blue, domain=-5:5, samples at = {-5,4.95,...,5}, smooth] plot[id=s2] function{sqrt(x) + 1};
\draw[thick, blue, domain=-5:5] plot[id=s3] function{0};
\end{tikzpicture}
\end{document}
但是,上面的代码不起作用。最后,我只好使用pgfplots
,效果很好:
\documentclass{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
% compat=1.11 for implicit pgfplots coordinate matching with TikZ background coords
\pgfplotsset{compat=1.11}
\begin{document}
\begin{tikzpicture}
\begin{axis}[axis lines = none, axis equal]
\draw[<->] (0,2) node[left] {$x$} -- (0,0) -- (1.5,0) node[below] {$r$};
\addplot[thick, blue, samples at = {0,0.05,...,1.1}] {sqrt(x) + 1};
\addplot[thick, blue, samples at = {0,0.05,...,1}] {-1*sqrt(x) + 1};
\addplot[thick, blue, domain=-1:1.1] {0};
\end{axis}
\end{tikzpicture}
\end{document}