atanh(x)
尽管似乎有一条巨大的直线连接顶部和底部点,但我仍在尝试绘图。我做错了什么吗?
\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[no markers,samples=1001]
\addplot gnuplot{atanh(x)};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
一个可能不令人满意的解决方案可能是限制是值到某个特定的域。
\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
no markers,
samples=1000,
restrict y to domain=-2:2
]
\addplot gnuplot{atanh(x)};
\end{axis}
\end{tikzpicture}
\end{document}
源自第 4.21 节 »pgf图« 手册(第 272 页)。
答案2
我认为这不是问题,gnuplot
因为tkz-fct
使用 gnuplot
,我得到
和
\documentclass{standalone}
\usepackage{tkz-fct}
\begin{document}
\begin{tikzpicture}
\tkzInit[xmin=-1,xmax=1,xstep=.2,
ymin=-5,ymax=5,ystep=1]
\tkzGrid[color=brown,sub,subxstep=.1](-1,-5)(1,5)
\tkzAxeXY
\tkzFct[color=red,samples=1001,domain = -1:1]%
{atanh(\x)}
\end{tikzpicture}
\end{document}
也许 pgfplots 中有一个选项可以避免这个问题。pgfplots 的作者 Christian F. 一定会帮助你。
答案3
以下是 Jake 所评论的用结果表完成同一项工作的不同方法的比较:
首先,我们画几个 atanh(x) 图
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[no markers,samples=202,restrict y to domain=-2:2]
\addplot[id=atanh1] gnuplot{atanh(x)};
\end{axis}
\begin{scope}[domain=-2:2,shift={(10,2.5)}]
\draw[ultra thick,red] plot[raw gnuplot,id=raw-example] function{set samples 202; plot atanh(x)};
\end{scope}
\begin{scope}[shift={(0,-7)}]
\begin{axis}[no markers,samples=202,domain=-0.999:0.999]
\addplot[id=atanh1] gnuplot{atanh(x)};
\end{axis}
\end{scope}
\end{tikzpicture}
\end{document}
我在这里要强调的是与 Jake 的评论一致。如果您查看.table
前两种方法生成的文件,大多数采样点都被丢弃了,甚至在原始部分中,它也是用线绘制到原点的。这是文件中pgfplots
的快照。和是混淆的标识符,但它还是会绘制它们。.table
raw-example
u
i
pgfplots
我们可以看到,只有有限数量的点值得关注,其余的点要么在函数域之外-1<x<1
,要么是数值噪声,这就是我手动调整到 202 个样本的原因。然而,在我的最后一个例子中,我限制了函数的域,使得所有样本都是有效的,并提高了分辨率。
长话短说,依赖绘图仪识别函数域并过滤它们的能力并不是一个好主意,这会导致产生虚假采样点、增加编译时间和增加文件大小,而这毫无道理。虽然和gnuplot
都是pgfplots
很棒的工具,但我们还是应该帮助它们一点 :)