我的表中有很多数据,但它们不是线性相关的。我可以通过计算函数(x expr
和y expr
表达式)将关系线性化。我想用pgfplots
在 pgfplot 中显示数据表达式的结果,并使用该create col/linear regression
操作查找和绘制回归线。
这是 MWE
\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots,pgfplotstable}
\usepackage{siunitx}
\begin{document}
\pgfplotstableread{%
myx myy
1 1
2 1.41
3 1.67
4 2.03
5 2.2
6 2.45
9 2.97
}\mytable
\begin{tikzpicture}
\begin{axis}[xlabel=my x,ylabel=(my y)$^2$]
\addplot[only marks] table {\mytable}; %
\addplot[only marks] table[y expr=\thisrow{myy}*\thisrow{myy}] {\mytable};
\addplot[no marks] table[y={create col/linear regression={y=myy}}] {\mytable}; %
% \addplot[no marks] table[y={create col/linear regression={y expr={\thisrow{myy}*\thisrow{myy}}}}] {\mytable};
\end{axis}
\end{tikzpicture}
\end{document}
输出如下:
我绘制了myx vs myy
和myx vs myy$^2$
数据点,以及原始数据的线性回归。当我尝试对平方进行线性回归时,myy
我得到了错误。具体错误取决于我尝试的语句的形式[y={create col/linear regression={....}}]
,我尝试了很多,但都不起作用。
是否可以在pgfplots/pgfplotstable
上下文中进行这种回归?如果不行,除了输入线性化的数据点外,还能做什么呢,因为我已经在 LaTeX 中有了数据表...
(为什么这个 SE 部分不支持 MathJax 输入?!)
答案1
好的,经过一番搜索,我找到了在表中创建新列的函数。完成此操作后,我可以对新计算的(线性化)列进行线性回归。这可能不是创建列的最有效或最优雅的代码,但它确实有效。
我用它\pgfplotstableset{create on use ...}
来计算一个新列myysquare
,然后将其{y=myysquare}
作为回归中的值。我对真实数据的实际线性化操作只是稍微复杂一点,所以移植它应该不是问题。
\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots,pgfplotstable}
\usepackage{siunitx}
\begin{document}
\pgfplotstableread{%
myx myy
1 1
2 1.41
3 1.67
4 2.03
5 2.2
6 2.45
9 2.97
}\mytable
\pgfplotstableset{ %
create on use/myysquare/.style={ %
create col/expr={\thisrow{myy}*\thisrow{myy}}}
}
\begin{tikzpicture}
\begin{axis}[xlabel=my x,ylabel=(my y)$^2$]
\addplot[only marks] table {\mytable}; %
\addplot[only marks] table[y=myysquare] {\mytable};
\addplot[no marks] table[y={create col/linear regression={y=myy}}] {\mytable}; %
\addplot[no marks] table[y={create col/linear regression={y=myysquare}}] {\mytable}; %
\end{axis}
\end{tikzpicture}
\end{document}