Problema con el filtro x al intentar filtrar puntos según el valor de x

Problema con el filtro x al intentar filtrar puntos según el valor de x

Estoy intentando filtrar puntos según sus valores de x. Los datos pueden ser de un archivo de texto con formato de tabla o escribirse directamente en coordenadas {...}. Intenté usar x filter/.code, pero para los datos del archivo de texto parece estar bien, mientras que el mismo código produce un error de compilación si los datos se escriben directamente a través de las coordenadas {...}.

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

vs

\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)};

Sospecho que podría ser mi uso problemático de \pgfmathresult en el filtro x, pero no estoy seguro de cómo solucionarlo. Los siguientes son el MWE junto con el error de compilación. Suponiendo que el archivo tmp.txt sea:

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

Y el código es:

\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}

Respuesta1

Es porque las coordenadas se manejan a través de una representación interna de punto flotante, que para mí es Klingon 1.1Y0.e1(o algo así), así que lo ves Yen el mensaje de error. La solución es convertirlo a decimal regular.

También \ifnumfunciona solo con números enteros, pero pgfmath tiende a escupir 1.0incluso para números enteros, 1por lo que es mejor hacer una comparación de dimensiones para deshacerse de las complicaciones.

\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}

ingrese la descripción de la imagen aquí

información relacionada