Problem mit dem X-Filter beim Versuch, Punkte nach dem X-Wert zu filtern

Problem mit dem X-Filter beim Versuch, Punkte nach dem X-Wert zu filtern

Ich versuche, Punkte nach ihren x-Werten zu filtern. Die Daten können aus einer tabellenformatierten Textdatei stammen oder direkt in Koordinaten{...} eingegeben sein. Ich habe versucht, x filter/.code zu verwenden, aber für Daten aus einer Textdatei scheint das in Ordnung zu sein, während derselbe Code einen Kompilierungsfehler erzeugt, wenn die Daten direkt über Koordinaten{...} eingegeben werden.

\addplot[scatter, only marks] table[x=xx, y=yy, col sep=comma]{tmp.txt}; 
% Seems working

Gegen

\addplot[scatter, only marks] coordinates{(0,0) (1,1) (1,1.5) (2,2)}; 
%|16 error| Missing = inserted for \ifnum. Y ...s] coordinates{(0,0) (1,1) (1,1.5) (2,2)};

Ich vermute, dass es an meiner problematischen Verwendung von \pgfmathresult im X-Filter liegen könnte, bin mir aber nicht sicher, wie ich das beheben kann. Im Folgenden sind die MWE zusammen mit dem Kompilierungsfehler aufgeführt. Angenommen, die Datei tmp.txt lautet:

xx, yy
0,0 
1,1 
1,1.5 
2,2 

Und der Code lautet:

\documentclass{article}
\usepackage{pgfplots}   

\begin{document}

\begin{tikzpicture}[scale=0.8]
\begin{axis}[
  x filter/.code= {
    \ifnum\pgfmathresult=1
      \def\pgfmathresult{}
    \fi
 }]
  % This seems working fine
  \addplot[scatter, only marks] table[x=xx, y=yy, col sep=comma]{tmp.txt}; 

  % This cause compilation error, which is
  % |16 error| Missing = inserted for \ifnum. Y ...s] coordinates{(0,0) (1,1) (1,1.5) (2,2)};

  %\addplot[scatter, only marks] coordinates{(0,0) (1,1) (1,1.5) (2,2)};
\end{axis} 
\end{tikzpicture}

\end{document}

Antwort1

Das liegt daran, dass Koordinaten über eine interne Gleitkommadarstellung verarbeitet werden, die für mich Klingonisch ist 1.1Y0.e1(oder so ähnlich), sodass Sie das Yin der Fehlermeldung sehen. Die Lösung besteht darin, sie in eine normale Dezimalzahl umzuwandeln.

Funktioniert auch nur mit ganzen Zahlen, aber pgfmath neigt dazu, auch für ganze Zahlen \ifnumFehler auszuspucken, also machen Sie besser einen Dimensionsvergleich, um die Komplikationen loszuwerden.1.01

\documentclass{article}
\usepackage{pgfplots}   

\pgfplotstableread{
xx yy
0 0
1 1
1 1.5
2 2
}\mytable
\begin{document}

\begin{tikzpicture}[scale=0.8]
\begin{axis}
\addplot[scatter, only marks,  x filter/.code= {
    \ifnum\pgfmathresult=1
      \def\pgfmathresult{}
    \fi
 }] table[x=xx, y=yy]{\mytable}; 

  \addplot+[no marks,  x filter/.code={
\pgfkeys{/pgf/fpu,/pgf/number format/.cd,fixed,verbatim}
\pgfmathprintnumberto{\pgfmathresult}{\mytempvar}
    \ifdim\mytempvar pt=1pt%
      \def\pgfmathresult{}
    \fi
}] coordinates{(0,0) (1,1) (1,1.5) (2,2)};
\end{axis} 
\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen