如何在使用 semilogyaxis 時將線性迴歸擬合擴展到整個 x 軸範圍

如何在使用 semilogyaxis 時將線性迴歸擬合擴展到整個 x 軸範圍

因為我在另一篇文章中被問到:

pgfplots 中的趨勢線或最佳擬合線

為了明確地提出這個問題,我現在這樣做:

如何擴展線性迴歸擬合,例如生成(注意半軸!!):

\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,該線將不再是直線(當然不是!)。儘管在 axis 環境中產生的線性迴歸是完美線性的(但並未跨越整個 x 軸範圍...)。

答案1

對數轉換資料的迴歸線方程式為

Y=exp(b+m*X)

其中mb分別是斜率和截距。所以要繪製這條線,你應該使用

\addplot {exp(\intercept+\slope*x)};

您可以使用在環境之外進行迴歸,而不是使用addplot命令來確定斜率和截距。請注意,在這種情況下,您必須明確設定.在 a 中,這是自動完成的。axis\pgfplotstablecreatecol[linear regression={ymode=log}]{<col name>}{<data table>}ymode=logsemilogyaxis

這是一個完整的範例:

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

相關內容