
国別年別レベルの csv 形式のデータがあり、pgfplots を使用して、国ごとに 1 つのサブ図で、特定の変数を時間の経過とともにプロットしたいと考えています。私のアイデアは、groupplot
環境と内部のループを使用して、一連の国をループし、データを「フィルター アウト」して 1 つの国だけを残すというものでした。
問題は、データをフィルタリングして1つの国だけを残すことすらできないことです。これは、この例から改変した私の(非)動作例です。質問、フィルタリングしようとしている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
場合は何も行いません。 それ以外の場合は、この点をドロップします。