別の投稿で質問されたので:
この質問を明確にするために、私は今こうしています:
たとえば次のように生成された線形回帰フィットをどのように拡張できますか (semilogyaxis に注意してください)。
\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)
ここで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}