所以我有一个散点图并生成了一条回归线。有一些异常值对该线影响很大。我希望在计算线性回归时忽略它们。这应该基于它们的 Y 值来完成。
已经有一个类似问题。但答案是跳过前几个 X 值。不幸的是,这不是我需要的。
这就是我当前的代码:
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\usepackage{pgfplotstable}
\begin{document}
\begin{tikzpicture}
\begin{axis}[scatter/classes={a={mark=*,draw=black}}]
\pgfplotstableread{
a b
0 0.5
1 48
2 1.4
3 37
4 3.4
5 6.8
6 4.5
7 3.9
8 10
9 13
}\datatable
\addplot[scatter, only marks, scatter src=explicit symbolic]
table[
x=a,
y=b,
] {\datatable};
\addplot[
thick,
%% y filter/.expression={y<35 ? y : nan},
]
table [
x = a,
%% y expr = {(\thisrow{b} > 35 ? nan : \thisrow{b} )},
y = {create col/linear regression={y=b}},
] {\datatable};
\end{axis}
\end{tikzpicture}
\end{document}
该代码生成如下内容:
我已经尝试过y filter
和y expr
,但是那并没有真正起作用。
我也考虑过将大纲拆分成几个文件。但由于我的真实图表有 4 条回归线,最终我会有大约 8 个文件。这对我来说似乎不切实际。
所以我的问题是:在计算线性回归时,如何忽略超过 30 的 Y 值?
答案1
您不希望过滤线的输出坐标。我确实知道是否有更好的方法,但一种方法是将不需要的点的方差设置为高(默认值为,1
意味着1000
它们几乎不使用),如下所示:
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\usepackage{pgfplotstable}
\begin{document}
\begin{tikzpicture}
\begin{axis}[scatter/classes={a={mark=*,draw=black}}]
\pgfplotstableread{
a b
0 0.5
1 48
2 1.4
3 37
4 3.4
5 6.8
6 4.5
7 3.9
8 10
9 13
}\datatable
\addplot[scatter, only marks, scatter src=explicit symbolic]
table[
x=a,
y=b,
] {\datatable};
\addplot[
thick,
]
table [
x = a,
y = {create col/linear regression={y=b, variance={create col/expr={\thisrow{b}<30?1:1000}}}},
] {\datatable};
\end{axis}
\end{tikzpicture}
\end{document}