pgfplots 中的 x 轴范围较小

pgfplots 中的 x 轴范围较小

我尝试在 pgfplots 中绘制数据。我的数据文件有 1001 个点,范围(x 轴)从 2499999500 到 2500000500,因此步骤为 1。我在日志文件中收到消息“Package pgfplots 警告:x 轴的轴范围几乎为空;将其扩大(它是 [2499999500.0000000:2500000500.0000000])...”,并绘制了一条直线,轴限制范围从 2e9 到 3e9,使用xmin = ...等覆盖它们没有帮助。有什么想法可以解决吗?

文件 test.tex:

\documentclass{article}

\usepackage{pgfplots}

\begin{document}

\begin{tikzpicture}
      \begin{axis}[
        xmin=2499999500,
        xmax=2500000500,
      ]
      \addplot+ table [x index=0, y index=1] {testdata.dat};
    \end{axis}
\end{tikzpicture}

\end{document}

文件 testdata.dat:

2499999500 0
2500000000 1
2500000500 0

答案1

这不是一个答案,但解决方法是使用如下表达式:

\addplot+ table [x expr=\thisrow{x}-2500000000] {\mytable};

从数据集中减去一个较大的常见数字。这仍然使用 pgf 的数学引擎,并且适用于您的小测试用例。

\documentclass[border=1mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.8}
\usepackage{filecontents}
\begin{filecontents}{testdata.dat}
2499999500 0
2500000000 1
2500000500 0
\end{filecontents}

\begin{document}
\begin{tikzpicture}
\begin{axis}[xtick=data, xticklabels from table={testdata.dat}{[index]0}]
  \addplot+ table [x expr=\thisrowno{0}-2500000000] {testdata.dat};
\end{axis}
\end{tikzpicture}
\end{document} 

在此处输入图片描述

对于间距很近的数据,这种方法仍然行不通。FPU 引擎的精度可以用以下方法显示:

\pgfkeys{/pgf/fpu=true}
\pgfmathparse{2500000400 - 2500000500}
\pgfmathprintnumber{\pgfmathresult}
\pgfkeys{/pgf/fpu=false} 

当第 8 位发生变化时,会打印零。因此,我建议使用 pgfmanual 中建议的 gnuplot 或在外部预处理数据集。

或者说,该fp包更适合这个问题,因为它使用固定点进行操作。我不知道如何将其与 pgfplots 集成。


更新:

虽然 LaTeX 的精度有限,但使用 LuaTeX 进行计算却没有问题,而且结果相当不错。如果使用 LuaTeX 运行,以下示例将产生正确的输出:

\documentclass[tikz,preview]{standalone}
\usepackage{tikz,pgfplots,pgfplotstable}
\pgfplotsset{compat=1.8} 

\begin{document}

\pgfplotstableread
{
x y 
2499999500  1
2499999501  2
2499999502  3
2499999503  4
2499999504  5
2499999505  6
2499999506  7
2499999507  8
2499999508  9
2499999509  10
}\mytable;

\begin{tikzpicture}
    \begin{axis}
    \addplot+ table [x expr=\directlua{tex.print(\thisrow{x}-2499999500)},y=y] {\mytable}; 
    \end{axis}
\end{tikzpicture}

\end{document}

使用 lua 的新示例

相关内容