다른 게시물에서 질문을 받았기 때문에 :
이 질문을 명시적으로 하기 위해 지금 그렇게 하고 있습니다.
예를 들어 생성된 선형 회귀 피팅을 어떻게 확장할 수 있습니까(세미로지축 참고):
\documentclass[fontsize=12pt,openright,oneside,DIV11,a4paper,numbers=noenddot,headsepline,parskip=half]{scrbook}
\usepackage[latin1]{inputenc}
\usepackage[cmex10]{amsmath}
\usepackage{dsfont}
% SIUnitx package
\usepackage{siunitx}
\DeclareSIUnit{\dBm}{dBm}
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.3}
\begin{document}
\begin{tikzpicture}
\begin{semilogyaxis}[
legend style={font=\footnotesize},
legend pos=north east,
legend cell align=left,
/pgf/number format/.cd,
use comma,
xlabel=x,
ylabel=y,
ymin=,
ymax=,
xmin=0,
xmax=10,
]
\addplot+[only marks,color=black, mark=square*,mark options={fill=black}] table[x=x,y=y] {measurement1.txt};
\addlegendentry{measurement1};
% Here I would like to plot the linear regression for the whole x-axis range, not only for the x-values in measurement1.txt
\addplot+[solid,thick,color=black, no marks] table[y={create col/linear regression={y}}] {measurement1.txt};
\addlegendentry{linearregression1};
\end{semilogyaxis}
\end{tikzpicture}
\end{document}
전체 x축 범위로 확장하시겠습니까(예: 0~10이고 측정 지점 범위는 2~8뿐입니다)? Measurement1.txt에 있는 데이터 포인트의 x 값에 대해서만 플롯됩니다. 예, 기울기를 추출하고 다음을 사용하여 가로챌 수 있습니다.
\xdef\slope{\pgfplotstableregressiona}
\xdef\yintercept{\pgfplotstableregressionb}
\addplot+[solid,thick,color=black, no marks,domain=0:-10] (x,\slope*x+\yintercept);
그러나 semilogyaxis를 사용하면 선은 더 이상 직선이 아닙니다(물론 그렇지 않습니다!). 축 환경에서 생성된 선형 회귀는 완벽한 선형이지만(그러나 전체 x축 범위에 걸쳐 있지는 않습니다...)
답변1
로그 변환된 데이터의 회귀선 방정식은 다음과 같습니다.
Y=exp(b+m*X)
기울기와 절편은 각각 어디에 m
있고 어디에 있습니까? b
따라서 선을 그리려면 다음을 사용해야 합니다.
\addplot {exp(\intercept+\slope*x)};
addplot
경사와 절편을 결정하기 위해 명령을 사용하는 대신 를 사용 axis
하여 환경 외부에서 회귀를 수행할 수 있습니다 \pgfplotstablecreatecol[linear regression={ymode=log}]{<col name>}{<data table>}
. 이 경우 명시적으로 설정해야 합니다 ymode=log
. 내에서는 semilogyaxis
이 작업이 자동으로 수행됩니다.
완전한 예는 다음과 같습니다.
\documentclass{article}
\usepackage{pgfplots, pgfplotstable}
\begin{document}
\pgfplotstableread{
1 2.3
2 3.4
3 9
4 17
5 30
6 70
7 120
8 250
9 650
}\datatable
\pgfplotstablecreatecol[linear regression={ymode=log}]{regression}{\datatable}
\xdef\slope{\pgfplotstableregressiona} % save the slope parameter
\xdef\intercept{\pgfplotstableregressionb} % save the intercept parameter
\begin{tikzpicture}
\begin{axis}[
ymode=log,
xmin=0,xmax=10
]
\addplot [only marks, red] table {\datatable}; % plot the data
\addplot [no markers, domain=0:10] {exp(\intercept+\slope*x)};
\end{axis}
\end{tikzpicture}
\end{document}