线性回归宏

线性回归宏
\newcommand{\LinReg}[4]{
  \addplot table[mark=none, y={create col/linear regression={y=#3}}] {#4};
  \addplot[only marks, mark size=0.7, x index = #1, y index = #2] table {#4};

  \addlegendentry{%
  $\pgfmathprintnumber[precision=2]{\pgfplotstableregressiona} \cdot x
   \pgfmathprintnumber[precision=2,print sign]{\pgfplotstableregressionb}$} %
}

我正在尝试制作一个宏,它只给我一个包含线性回归的 csv 文件中的数据图。我在这里寻找灵感,但似乎找不到任何简单的东西?

我想要的一件事。就是通过索引或名称(带空格)指定哪一列是 X 值,哪一列是 Y 值。数据是从类似以下内容读取的:

\pgfplotstableread[col sep=comma]{Data/kanthal-lang.csv}\KanthalLang

那可能吗?

答案1

您的意思是下面这样的东西吗?(我认为现在您可以轻松地使用列名而不是索引来调整它。)

    \begin{filecontents}{kanthal-lang.csv}
        % a,1,2,-0.5
        % b,1,-1,8
        x,y1,y2,y3
        0,1,-1,8.0
        1,2,1,7.5
        2,3,3,7.0
        3,4,5,6.5
        4,5,7,6.0
        5,6,9,5.5
    \end{filecontents}
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
    \pgfplotsset{
        compat=1.14,
    }
\newcommand{\LinReg}[3]{
    \addplot+ [
        only marks,
        mark size=0.7,
        % to not advance the cycle list and to not create a legend entry
        forget plot,
    ] table [
        x index=#1,
        y index=#2,
    ] {#3};
    \addplot+ [
        mark=none,
    ] table [
        x index=#1,
        y={create col/linear regression={y=[index]#2}},
    ] {#3};

    \addlegendentryexpanded{%
        $\pgfmathprintnumber[precision=2]{\pgfplotstableregressiona} \, x
        \pgfmathprintnumber[precision=2,print sign]{\pgfplotstableregressionb}$%
    }
}
\begin{document}
    \begin{tikzpicture}
            \pgfplotstableread[col sep=comma]{kanthal-lang.csv}\KanthalLang
        \begin{axis}
            \LinReg{0}{1}{\KanthalLang}
            \LinReg{0}{2}{\KanthalLang}
            \LinReg{0}{3}{\KanthalLang}
        \end{axis}
    \end{tikzpicture}
\end{document}

该图显示了上述代码的结果

相关内容