pgfplots: 데이터 파일에서 국가별로 하나의 하위 그림 그리기

pgfplots: 데이터 파일에서 국가별로 하나의 하위 그림 그리기

국가-연도 수준의 csv 형식 데이터가 있고 pgfplots를 사용하여 국가별로 하나의 하위 그림을 사용하여 시간이 지남에 따라 주어진 변수를 플롯하고 싶습니다. 내 아이디어는 환경과 내부 루프를 사용하여 groupplot국가 집합을 반복하고 데이터를 "필터링"하여 한 국가만 유지하는 것이었습니다.

문제는 한 국가만 유지하기 위해 데이터를 필터링할 수도 없다는 것입니다. 이것은 나의 (비)작동 예입니다.질문, 필터링을 시도 중입니다.country == GER

\documentclass{standalone}
\usepackage{filecontents}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.7}
\usepackage{pgfplotstable}

\begin{filecontents}{CountryYears.csv}
    country,year,vartoplot
    AUT,1998,.1
    AUT,1999,.2
    AUT,2000,.7
    GER,1999,.4
    GER,2000,.45
    GER,2001,.7
    GER,2002,.6
    FRA,2000,.5
    FRA,2001,.75
    FRA,2002,.57894
    FRA,2003,.549
\end{filecontents}

\begin{document}
    \pgfplotstableset{columns/country/.style={string type}}
    \pgfplotstableread[col sep=comma]{CountryYears.csv}\loadeddata

      \begin{tikzpicture}
      \begin{axis}[
      x filter/.code={\pgfplotstablegetelem{\coordindex}{country}\of{\loadeddata}
        \pgfmathtruncatemacro{\tempva}{\pgfplotsretval == GER ? 1: 0}
        \ifnum\tempva>0%true
        \else%false
        \def\pgfmathresult{}
        \fi
      },
      ]
      \addplot[only marks] table[x=year,y=vartoplot] {\loadeddata};
      \end{axis}
      \end{tikzpicture}
\end{document}

문자열 열을 필터링하려고 하기 때문에 작동하지 않는 것 같나요? (국가가 포함된 것입니다.) 하지만 그것도 확실하지 않습니다. 어쨌든, 필터링 문제에 대한 몇 가지 조언이나 이러한 국가 하위 그래프를 수행하는 보다 우아한 접근 방식에 대한 제안을 주시면 감사하겠습니다.

답변1

먼저 다음과 같이 문자열을 정의합니다.

\def\AUTstring{AUT}

그런 다음 필터를 다음과 같이 작성하십시오.

    x filter/.code={
        \pgfplotstablegetelem{\coordindex}{country}\of{\loadeddata}
        \ifx\pgfplotsretval\AUTstring
        \else
            \pgfmathparse{inf}
        \fi
    }

즉, 그렇다면 \pgfplotsretval아무것도 AUT하지 마십시오. 그렇지 않으면 이 점을 삭제하십시오.

관련 정보