我如何能够根据元数据计算两个线性回归?
在我的例子中,我希望对绿点和红点分别进行一次线性回归。
\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}