PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : TIKZ pgfplots mehrere Auslgeichsgeraden in einem Diagramm, Steigung angeben



zac
03-04-2012, 20:33
Hallo,

ich würde gerne mehrere Auslgeichsgeraden in einem Diagramm darstellen. Das funktioniert soweit ganz gut. Wenn ich nun aber die Steigung bzw. Funktion beider angeben will, dann gibt es mir zweimal die gleiche an



\documentclass[a4paper]{scrartcl} %Dokumentklasse - für kürzere Artikel und Aufsätze

\usepackage[ansinew]{inputenc} %deutsche Zeichen
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage[a4paper,left=20mm,right=20mm, top=25mm, bottom=25mm]{geometry}
%Seitenränder einstellen\usepackage{pgfplotstable}
\usepackage{pgfplotstable}
\begin{document}
\pagestyle{empty}
\noindent
Damit es etwas übersichtlicher wird, veranschaulichen wir unsere Ergebnisse in zwei Diagrammen:\\[1em]
\begin{tikzpicture}
\begin{axis}[legend pos=outer north east,
xmin=0,
xmax=10,
xlabel={i},
ylabel={$R_i=\ln\left(A_{m,i}/A_{m,0}\right)$},
ymin=-1.2,
ymax=0,
grid=major,
%restrict y to domain=-70:40, % an Stelle konkreter Wertebereiche für y
scale=1.5
]

\addplot[no marks] table [
y={create col/linear regression={y=Y}}]
{
X Y
0 0
1 -0.027398974
2 -0.055569851
3 -0.084557388
4 -0.114410351
5 -0.129677823
6 -0.14518201
7 -0.160930367
8 -0.193191229
9 -0.209720531
};
\addlegendentry{%
$\pgfmathprintnumber{\pgfplotstableregressiona} \cdot x
\pgfmathprintnumber[print sign]{\pgfplotstableregressionb}$}
% \addlegendentry{Ausgleichsgerade für $m=0$}
\addplot[only marks]
coordinates {
(0,0)
(1,-0.027398974)
(2,-0.055569851)
(3,-0.084557388)
(4,-0.114410351)
(5,-0.129677823)
(6,-0.14518201)
(7,-0.160930367)
(8,-0.193191229)
(9,-0.209720531)
};
\addlegendentry{Messwerte $m=0$}
\addplot[red,no marks] table [
y={create col/linear regression={y=Y}}]
{
X Y
0 0
1 -0.060624622
2 -0.09237332
3 -0.176456437
4 -0.230523659
5 -0.268263987
6 -0.3074847
7 -0.348306694
8 -0.369360103
9 -0.435318071
};
\addlegendentry{%
$\pgfmathprintnumber{\pgfplotstableregressiona} \cdot x
\pgfmathprintnumber[print sign]{\pgfplotstableregressionb}$}
% \addlegendentry{Ausgleichsgerade für $m=1$}
\addplot[red,only marks]
coordinates {
(0, 0)
(1, -0.060624622)
(2, -0.09237332)
(3, -0.176456437)
(4, -0.230523659)
(5, -0.268263987)
(6, -0.3074847)
(7, -0.348306694)
(8, -0.369360103)
(9, -0.435318071)
};
\addlegendentry{Messwerte $m=1$}
\end{axis}

\end{tikzpicture}
\end{document}
Ich bin leider aus dem pgfplotsmanual auch nicht schlau geworden. Ich würde nämlich nicht gern 5 verschiedene plots machen, nur um die funktion richtig anzeigen zu lassen.

Feuersaenger
03-04-2012, 21:17
Hi zac,

die regression schreibt die Parameter der kurve immer in dieselben macros rein - und ueberschreibt diese entsprechend.

Nun wird eine achse erst immer ganz prozessiert, bevor die erste Zeichenoperation durchgefuehrt wird - was dazu fuehrt, dass erst ALLE regressionsgerade ausgerechnet werden bevor die erste legende dargestellt wird.

Abhilfe: kopiere die gewuenschten steigungen in temporaere Variablen mit

\xdef\slope{\pgfplotstableregressiona}

und benutze dann diese Variablen. Hier ist "\slope" ein (irgendwie) gewaehlter Name, "\xdef" heisst "expanded global definition". Nach dem Befehl enthaelt "\slope" eine Kopie des aktuellen werts von "\pgfplotstableregressiona". Wenn Du dann "\slope" in Deiner Legende verwendest (und fuer die weiteren plots andere variablen), dann passt es.

Mit liebem Gruss

Christian

zac
04-04-2012, 09:54
danke, das funktioniert wunderbar so!