![Problema com filtro x ao tentar filtrar pontos de acordo com valor x](https://rvso.com/image/254703/Problema%20com%20filtro%20x%20ao%20tentar%20filtrar%20pontos%20de%20acordo%20com%20valor%20x.png)
Estou tentando filtrar pontos de acordo com seus valores x. Os dados podem ser de um arquivo de texto formatado em tabela ou digitados diretamente em coordenadas{...}. Tentei usar x filter/.code, mas para dados de arquivo de texto parece bom, enquanto o mesmo código gera erro de compilação se os dados forem digitados diretamente por meio de coordenadas{...}.
\addplot[scatter, only marks] table[x=xx, y=yy, col sep=comma]{tmp.txt};
% Seems working
contra
\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)};
Suspeito que possa ser meu uso problemático de \pgfmathresult no filtro x, mas não tenho certeza de como consertar. A seguir estão o MWE junto com o erro de compilação. Supondo que o arquivo tmp.txt seja:
xx, yy
0,0
1,1
1,1.5
2,2
E o código é:
\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}
Responder1
É porque as coordenadas são tratadas por meio de representação interna de ponto flutuante, que para mim é Klingon 1.1Y0.e1
(ou algo parecido), então você vê isso Y
na mensagem de erro. A solução é convertê-lo para decimal regular.
Também \ifnum
funciona apenas com números inteiros, mas o pgfmath tende a cuspir 1.0
mesmo para números inteiros 1
, então é melhor fazer uma comparação de dimensões para se livrar das complicações.
\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}