Actually this is a bug that originally was reported in the TikZ/pgf tracker (https://sourceforge.net/p/pgf/bugs/383/, https://github.com/pgf-tikz/pgf/issues/382) but should most likely have been reported here. So I am "repeating" it here with some minor modifications/updates. I also provide an MWE at the end.
For simplicity here I only copy some lines of emails in German which should act as a reminder for Christian.
My email:
[...] könntest du mal einen kurzen Blick auf
https://tex.stackexchange.com/revisions/299200/3
werfen und mir sagen, ob es ein Bug ist, dass ich \NoOfRows nicht in \pgfplotstablegetelem verwenden kann. [...]
His answer:
[...] das mit \NoOfRows ist eine Mischung aus der komplizierten Nutzung der FPU engine und einem fehlenden sanity check (=bug).
Was passiert ist dass \NoOfRows auf 1Y4.0e0 gesetzt wird, was soviel heisst wie "+ 4.0 * 10^0". Als Zeilennummer interpretiert scheint der aber nur die "1" genommen zu haben und den Rest stillschweigend weggeworfen zu haben. [...]
MWE:
% used PGFPlots v1.16
% first put the data to an external file or a table,
% so it can be handled by the `pgfplotstable' package
\begin{filecontents}{data.txt}
0 0
1 1
2 2
3 3
4 4
\end{filecontents}
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usetikzlibrary{
fpu,
positioning, % <-- for debugging nodes only
}
\pgfplotsset{
compat=1.16,
}
\begin{document}
\begin{tikzpicture}
% to be sure that no numbers are interpreted as zero, activate `fpu'
% library
\tikzset{
fpu=true,
}
%%% find `xmin' and `xmax'
% for that first sort the table after the x values
\pgfplotstablesort{\SortedTable}{data.txt}
% then one can directly extract `xmin'
\pgfplotstablegetelem{0}{[index] 0}\of\SortedTable
\pgfmathsetmacro{\xmin}{\pgfplotsretval}
%% now extract `xmax'
% for that we first need to extract the number of rows in the table
\pgfplotstablegetrowsof{\SortedTable}
\pgfmathsetmacro{\NoOfRows}{\pgfplotsretval-1}
% then we can extract the last entry in the sorted table
% (I think because of a bug this doesn't work so one has to
% enter the index manually)
\pgfplotstablegetelem{\NoOfRows}{[index] 0}\of\SortedTable
% \pgfplotstablegetelem{4}{[index] 0}\of\SortedTable
\pgfmathsetmacro{\xmax}{\pgfplotsretval}
\tikzset{
fpu=false,
}
\begin{axis}[
% add the extra ticks from the extracted data
extra x ticks={
\xmin,
\xmax
},
% just to make sure these are the extra ticks, draw them red
extra x tick style={
text=red,
},
]
\addplot +[black, mark options=fill=black] table {data.txt};
% for debugging show the value of `xmax'
\node [fill=black!25,anchor=north west] (a) at (rel axis cs:0.02,0.98)
{Rows = \pgfmathprintnumber{\NoOfRows}};
\node [fill=black!25,below=1pt of a.south west,anchor=north west]
{xmax = \pgfmathprintnumber{\xmax}};
\end{axis}
\end{tikzpicture}
\end{document}
which results in the attached picture.