PGFplot zeichnet y über x, wobei z=Balken (vergleichbar mit SQL WHERE-Klausel)

PGFplot zeichnet y über x, wobei z=Balken (vergleichbar mit SQL WHERE-Klausel)

Ich verwende TexLive XuaLatex mit PGFplots 1.13, um Daten darzustellen. Ich habe eine Tabelle wie diese:

 x , y  , z
 0 , 0  , 0 
 0 , 0  , 1 
 1 , 1  , 0 
 1 , 1  , 1 
 2 , 2  , 0 
 2 , 4  , 1 
 3 , 3  , 0 
 3 , 9  , 1 
 4 , 4  , 0 
 4 , 16 , 1 
 5 , 5  , 0 
 5 , 25 , 1 
 6 , 6  , 0 
 6 , 36 , 1 

Wie kann ich die Achsenumgebung von PGFplot verwenden, um y über x zu zeichnen, wobei z=bar ist und bar eine Zahl ist? Ich denke dabei an die Art und Weise, wie Sie auf Daten zugreifen können mitMySQL

\begin{tikzpicture}
    \begin{axis}[/pgf/number format/.cd, use comma]
        \addplot
            table[x=x,y=y,WHERE z=0, col sep=comma]
            {DATA.csv};

        \addplot
            table[x=x,y=y,WHERE z=1,col sep=comma]
            {DATA.csv};


    \end{axis}
\end{tikzpicture}

Ich habe dazu im Handbuch nichts gefunden. Ich möchte keine Lösung, die die Frage durch eine Tabelle wie diese auslässt:

x,   y1,   y2

und erstellen Sie dann ein Diagramm mit x=x, y=y1 und ein zweites Diagramm mit x=x, y=y2.

Für das einfache Beispiel, das ich anführe, ist das vielleicht eine praktische Lösung, aber für mein Problem funktioniert es nicht, weil im echten Problem 10 verschiedene y-Werte über x für 4 verschiedene z-Werte aufgetragen werden müssen, und ich möchte die Implementierung aus mehreren Gründen wirklich nicht wie die vorgeschlagene Lösung.

Vielen Dank für Ihre Zeit

Antwort1

Ich denke, es gibt mehrere Möglichkeiten, dies zu tun. Eine Möglichkeit wäre, y expr={ifthenelse(\thisrow{z}==0,\thisrow{y},nan}anstelle von zu verwenden y=y.

\documentclass[border=5mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}
\usepackage{filecontents}
\begin{filecontents*}{DATA.csv}
x,y,z
0,0,0
0,0,1
1,1,0
1,1,1
2,2,0
2,4,1
3,3,0
3,9,1
4,4,0
4,16,1
5,5,0
5,25,1
6,6,0
6,36,1
\end{filecontents*}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[/pgf/number format/.cd, use comma]
        \addplot
            table[x=x,y expr={ifthenelse(\thisrow{z}==0,\thisrow{y},nan)}, col sep=comma]
            {DATA.csv};

        \addplot
            table[x=x,y expr={ifthenelse(\thisrow{z}==1,\thisrow{y},nan)},col sep=comma]
            {DATA.csv};

    \end{axis}
\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen