我有一個包含標誌以及 x 和 y 值的表。我想要對第一列中包含 1 的所有行進行回歸。我怎樣才能做到這一點?
\documentclass{article}
\usepackage{array}
\usepackage{pgfplots}
\pgfplotsset{compat=1.5.1}
\usepackage{pgfplotstable}
\begin{document}
\pgfplotstableread{
Exmpl a v
1 0 0
1 1 1
1 2 1
1 3 4
2 0 -0
2 1 -1
2 2 -1
2 3 -4
} \data
\begin{tikzpicture}
\begin{axis} % [legend pos=outer north east]
\addplot table [x=a, y=v] {\data};
\addplot table [x=a, y={create col/linear regression={y=v}}] {\data};
\end{axis}
\end{tikzpicture}
\end{document}
我認為, pgfplots 過濾器在這裡不適用,因為我猜, pgfplots 只獲取 x 和 y 值。如果有可能創建一個過濾表並從那裡進行回歸和繪圖,那就太好了。
答案1
我想在兩個問題的幫助下我幾乎有了解決方案: 使用 pgfplotstable 建立列聯表和 使用 pgfplots 存取單一表格元素? 這個想法是,如果 Exmpl - 值為 1,則要轉置矩陣,建立一個新矩陣,循環所有列並複製列。
\documentclass{article}
\usepackage{array}
\usepackage{pgfplots}
\pgfplotsset{compat=1.5.1}
\usepackage{pgfplotstable}
\usepackage{ifthen}
\newcommand{\pgfplotstablefilterrows}[3]
{
\pgfplotstablegetrowsof{#1}
\pgfmathsetmacro{\NumOfRows}{\pgfplotsretval}
\pgfmathsetmacro{\MaxRow}{\NumOfRows-1}
\pgfplotstablegetcolsof{#1}
\pgfmathsetmacro{\NumOfCols}{\pgfplotsretval}
\pgfplotstabletranspose{\TransposedData}{#1}
\pgfplotstableset{create on use/TransposedHead/.style={copy column from table={\TransposedData}{[index]0}}}
\pgfplotstablenew[columns={TransposedHead}]{\NumOfCols}{\TransposedFilteredData}
\pgfplotsforeachungrouped \pgfplotstablerowindex in {0,1,...,\MaxRow}{ % Row loop
#3
}
\pgfplotstabletranspose[colnames from=TransposedHead,input colnames to=]{#2}{\TransposedFilteredData}
\pgfplotstableclear{\TransposedData}
\pgfplotstableclear{\TransposedFilteredData}
}
\begin{document}
\pgfplotstableread{
Exmpl a v
1 0 0
1 1 1
1 2 1
1 3 4
2 0 -0
2 1 -1
2 2 -1
2 3 -4
} \data
\pgfplotstablefilterrows{\data}{\FilteredData}
{
\pgfplotstablegetelem{\pgfplotstablerowindex}{[index]0}\of\data
\ifthenelse{\equal{\pgfplotsretval}{1}}
{
\pgfplotstablecreatecol[copy column from table={\TransposedData}{\pgfplotstablerowindex}]{\pgfplotstablerowindex}{\TransposedFilteredData}
}
{}
}
\begin{tikzpicture}
\begin{axis} % [legend pos=outer north east]
\addplot table [x=a, y=v] {\data};
\addplot table [x=a, y={create col/linear regression={y=v}}] {\FilteredData}; % compute a linear regression from the input table
\end{axis}
\end{tikzpicture}
\end{document}
正如您可能從程式碼中看到的,我在乳膠程式設計方面並沒有真正的經驗。無論如何,它有效。最好的,聚輝