更新:如果样本属于下列情况之一,则会出现问题:{19,21,23,28,30,31,32,34,36,38,39},所以我认为还有其他事情发生。
如果我将样本数量减少到 40 或以下,我可以让这个示例正常工作。否则,这会导致图形不正确。我想知道这个看似巨大的舍入问题是否可能表明数学引擎存在其他潜在问题。那么,这是一个已知问题吗?我只需要确保根据正在绘制的内容调整样本数量吗?
下面的 MWE 示例产生了以下输出,但它应该只是一条直线。
\documentclass{article}
\usepackage{pgfplots}
\usepackage{amsmath}
\begin{document}
\begin{tikzpicture}
\begin{axis}[xmin=-4,xmax=+0, ymin=-0.5,ymax=4.5]
\addplot[draw=blue, mark=none, ultra thick, domain=-4.0:-0.1,
samples=100] % Fine is sample < 42, and NOT {19,21,23,28,30,31,32,34,36,38,39}
{(3*x + abs(x))/x}
node [midway, above right] {$y=\frac{3x + |x|}{x}$};
\end{axis}
\end{tikzpicture}
\end{document}
更新2011-11-03:无法使用当前 TeXLive2011 版本重现此行为,因此问题肯定已得到解决。
答案1
似乎这是 pgf/tikz 中的一个错误:在我的计算机上,我得到了一条直线。
我可以确认这发生在 pgf 2.10 和 pgfplots 的稳定版本中。
它在 pgf 2.00 和/或 pgf CVS 中消失。
我刚刚上传了一个不稳定版本的 pgfplots,其中包含了 pgf 2.10 错误修复:您的示例将与不稳定的 pgfplots 版本一起使用http://pgfplots.sourceforge.net/以及 pgf 2.10。
因此,为了解决您的应用程序中的问题,我看到以下方法:
- 使用不稳定的 pgfplots(现在非常稳定)
- 使用 pgf CVS
- 降级至 pgf 2.00
- 改用 \addplot gnuplot 并启用 shell-escape 功能。
注意:手动安装 pgf CVS 或 pgf 2.00 比安装 pgfplots 更复杂,因为 pgfplots 采用 TDS 结构(与本地 texmf 安装目录兼容)。需要手动调整 pgf 版本,TeX 发行版才能将其接受为 TDS。
答案2
tikz 的计算似乎存在一些问题。可能是舍入错误?
作为一种解决方法,你可以使用 -shell-escape 到 gnuplot 并让 gnuplot 进行计算
\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot[draw,mark=none] gnuplot[raw gnuplot] {set xrange[-4:4];
plot (3*x+abs(x))/x};
\end{axis}
\end{tikzpicture}
\end{document}