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则不执行任何操作。否则删除该点。

相关内容