PGFplot은 x 위에 y를 플롯합니다. 여기서 z=bar(SQL WHERE 절과 비교 가능)

PGFplot은 x 위에 y를 플롯합니다. 여기서 z=bar(SQL WHERE 절과 비교 가능)

데이터를 플롯하기 위해 PGFplots 1.13과 함께 TexLive XuaLatex를 사용하고 있습니다. 다음과 같은 테이블이 있습니다.

 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 

PGFplot 축 환경을 사용하여 bar가 숫자일 때 z=bar인 x 위에 y를 플롯하려면 어떻게 해야 합니까? 나는 당신이 데이터에 접근할 수 있는 방법을 생각하고 있습니다.MySQL

\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}

나는 가이드에서 그것에 관한 어떤 것도 찾지 못했습니다. 나는 다음과 같은 테이블을 가지고 질문을 생략하는 솔루션을 원하지 않습니다.

x,   y1,   y2

그런 다음 x=x, y=y1로 플롯하고 x=x, y=y2로 두 번째 플롯을 수행합니다.

이것은 내가 제공하는 간단한 예에 대한 편리한 솔루션일 수 있지만 내 문제에는 작동하지 않습니다. 실제 문제에는 4개의 다른 z에 대해 x 위에 10개의 다른 y가 표시되고 실제로는 원하지 않기 때문입니다. 여러 가지 이유로 제안된 솔루션과 같은 구현.

시간 내 주셔서 대단히 감사합니다

답변1

나는 이를 수행하는 데 여러 가지 방법이 있다고 생각합니다. 한 가지 방법은 y expr={ifthenelse(\thisrow{z}==0,\thisrow{y},nan}.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}

여기에 이미지 설명을 입력하세요

관련 정보