
Ich habe Daten im CSV-Format auf Länder-Jahres-Ebene und möchte mithilfe von pgfplots eine bestimmte Variable im Zeitverlauf darstellen, mit einer Teilabbildung pro Land. Meine Idee war, eine groupplot
Umgebung zu verwenden: und eine Schleife darin, die alle Länder durchläuft und Daten „herausfiltert“, um nur ein Land beizubehalten.
Das Problem ist, dass ich die Daten nicht einmal filtern kann, um nur ein Land zu behalten. Dies ist mein (nicht) funktionierendes Beispiel, angepasst von diesemFrage, versucht zu filtern aufcountry == 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}
Ich vermute, es funktioniert nicht, weil ich versuche, nach einer Zeichenfolgenspalte zu filtern? (Diejenige, die das Land enthält.) Aber nicht einmal da bin ich mir sicher. Jedenfalls wäre ich für einige Hinweise zum Filterproblem oder vielleicht für einen Vorschlag zu einem eleganteren Ansatz zum Erstellen dieser Länder-Subgraphen dankbar.
Antwort1
Definieren Sie zunächst eine Zeichenfolge wie folgt:
\def\AUTstring{AUT}
und dann schreiben Sie Ihren Filter wie
x filter/.code={
\pgfplotstablegetelem{\coordindex}{country}\of{\loadeddata}
\ifx\pgfplotsretval\AUTstring
\else
\pgfmathparse{inf}
\fi
}
Das heißt, wenn \pgfplotsretval
ja, AUT
dann tun Sie nichts. Andernfalls lassen Sie diesen Punkt weg.