Da ich in einem anderen Beitrag gefragt wurde:
Trendlinie oder Regressionsgerade in pgfplots
um diese Frage explizit zu stellen, tue ich dies jetzt:
Wie kann ich die lineare Regressionsanpassung erweitern, die beispielsweise mit folgendem Ergebnis generiert wurde (beachten Sie die Semiologieachse!!):
\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}
auf den gesamten Bereich der X-Achse (z. B. 0 bis 10 und ich habe nur Messpunkte im Bereich von 2 bis 8)? Es werden nur die X-Werte für die Datenpunkte in measurement1.txt dargestellt. Ja, ich könnte die Steigung und den Achsenabschnitt extrahieren mit
\xdef\slope{\pgfplotstableregressiona}
\xdef\yintercept{\pgfplotstableregressionb}
\addplot+[solid,thick,color=black, no marks,domain=0:-10] (x,\slope*x+\yintercept);
aber wenn ich Semilogyaxis verwende, ist die Linie keine Gerade mehr (natürlich nicht!). Obwohl die in der Achsenumgebung generierte lineare Regression perfekt linear ist (aber nicht über den gesamten Bereich der x-Achse gespannt ist ...).
Antwort1
Die Gleichung für die Regressionsgerade für logarithmisch transformierte Daten lautet
Y=exp(b+m*X)
wobei m
und b
Ihre Steigung bzw. Ihr Achsenabschnitt sind. Um die Linie zu zeichnen, sollten Sie also verwenden
\addplot {exp(\intercept+\slope*x)};
Anstatt einen addplot
Befehl zum Bestimmen der Steigung und des Achsenabschnitts zu verwenden, können Sie die Regression außerhalb Ihrer axis
Umgebung mit durchführen \pgfplotstablecreatecol[linear regression={ymode=log}]{<col name>}{<data table>}
. Beachten Sie, dass Sie in diesem Fall explizit festlegen müssen ymode=log
. Innerhalb eines semilogyaxis
geschieht dies automatisch.
Hier ist ein vollständiges Beispiel:
\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}