플래그와 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}
코드에서 볼 수 있듯이 저는 라텍스 프로그래밍에 대한 경험이 없습니다. 어쨌든 작동합니다. 최고야, 주희