pgfplots 和 gnuplot 的绘图不正确

pgfplots 和 gnuplot 的绘图不正确

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的快照。和是混淆的标识符,但它还是会绘制它们。.tableraw-exampleuipgfplots

在此处输入图片描述

我们可以看到,只有有限数量的点值得关注,其余的点要么在函数域之外-1<x<1,要么是数值噪声,这就是我手动调整到 202 个样本的原因。然而,在我的最后一个例子中,我限制了函数的域,使得所有样本都是有效的,并提高了分辨率。

长话短说,依赖绘图仪识别函数域并过滤它们的能力并不是一个好主意,这会导致产生虚假采样点、增加编译时间和增加文件大小,而这毫无道理。虽然和gnuplot都是pgfplots很棒的工具,但我们还是应该帮助它们一点 :)

相关内容