\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}