PGFplot 绘制 y 与 x 的关系,其中 z=bar(与 SQL WHERE 子句类似)

PGFplot 绘制 y 与 x 的关系,其中 z=bar(与 SQL WHERE 子句类似)

我正在使用 TexLive XuaLatex 和 PGFplots 1.13 来绘制数据。我有一张这样的表格:

 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 轴环境绘制 y 与 x 的关系,其中 z=bar,bar 为数字。我在想,你可以用什么方式访问数据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 进行第二次绘图。

对于我给出的简单示例,这可能是一个方便的解决方案,但它不适用于我的问题,因为在实际问题中,有 10 个不同的 y 需要绘制在 x 上,用于 4 个不同的 z,而且我真的不希望实现像提出的解决方案那样,原因有几个。

非常感谢您的宝贵时间

答案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}

在此处输入图片描述

相关内容