pgfplotstable:根据元计算线性回归

pgfplotstable:根据元计算线性回归

我如何能够根据元数据计算两个线性回归?

在我的例子中,我希望对绿点和红点分别进行一次线性回归。

\documentclass[preview, border={10pt}]{standalone}

\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\usepackage{pgfplotstable}

\begin{filecontents*}{datatable.txt}
one two letter
 9   7   g
 9   6   g
 8   1   g
 7   3   g
 6   5   g
 6   5   g
 5   2   g
 4   8   r
 3   9   r
 3   2   r
 3   1   r
 2   3   r
 1   2   r
\end{filecontents*}

\begin{document}

\centering
\begin{tikzpicture}
\begin{axis}[
    scatter/classes={
        g={mark=*,green},
        r={mark=*,red}
    }
]
\addplot [scatter,only marks,scatter src=explicit symbolic] table [x=one, y=two, meta=letter] {datatable.txt};
\addplot [blue, no markers] table [x=one,y={create col/linear regression={y=two}}] {datatable.txt};
\end{axis}
\end{tikzpicture}

\end{document}

答案1

编辑:

仅使用 pgfplotstable 无法做到这一点。

对图表中带有列的部分进行回归(在开头),表示回归适用于整个表。回归不能仅应用于表的一部分。有一种使用 gnuplot 的解决方法,但您的解决方案也有效。

--罗斯


原始答案:

我仍然不知道如何仅使用一个文件来执行此操作,但这是我使用两个文件的解决方案

结果:

一幅图像中的两个线性回归

代码:

\documentclass[tikz, border={10pt}]{standalone}

\usepackage{pgfplotstable}
\pgfplotsset{compat=1.15}

\begin{filecontents*}{datatableA.txt}
one two letter
 9   7   g
 9   6   g
 8   1   g
 7   3   g
 6   5   g
 6   5   g
 5   2   g
\end{filecontents*}

\begin{filecontents*}{datatableB.txt}
one two letter
 4   8   r
 3   9   r
 3   2   r
 3   1   r
 2   3   r
 1   2   r
\end{filecontents*}

\begin{document}

\begin{tikzpicture}
\begin{axis}[
    scatter/classes={
        g={mark=*,green},
        r={mark=*,red}
    }
]
\addplot [scatter,only marks,scatter src=explicit symbolic] table [x=one, y=two, meta=letter] {datatableA.txt};
\addplot [scatter,only marks,scatter src=explicit symbolic] table [x=one, y=two, meta=letter] {datatableB.txt};
\addplot [green, no markers] table [x=one,y={create col/linear regression={y=two}}] {datatableA.txt};
\addplot [red, no markers] table [x=one,y={create col/linear regression={y=two}}] {datatableB.txt};
\end{axis}
\end{tikzpicture}

\end{document}

相关内容