TikZ/pgfplots: node pos nur anhand von Abzisse

Tabellen und Grafiken erstellen und anordnen


mofehl
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 62
Registriert: Mi 27. Aug 2014, 13:07

TikZ/pgfplots: node pos nur anhand von Abzisse

Beitrag von mofehl »

Hallo liebes Forum,

folgende Frage beschäftigt mich. Ich habe eine Funktion, bei der ich die Auswirkungen unterschiedlicher Parameter zeigen möchte. Also plotte ich die Funktion in pgfplots mit jeweils unterschiedlichen Einstellungen. Jetzt möchte ich die drei Varianten mit I, II und III beschriften. Dazu benutze ich die Einstellung pos=<Wert>. So wie ich das verstehe, berechnet TikZ intern die Länge vom Plot und setzt den Node dann an die entsprechende Stelle. Ich würde aber gerne, dass die Nodes in Abhängigkeit vom Abzissenwert (x-Achse) gesetzt werden. Denn das Problem ist, dass Funktionen, die stärker oszillieren, von TikZ eine größere Länge bekommen. Daher bedeutet pos=<Wert> für jeden Plot etwas anderes. Im Prinzip suche ich so etwas wie "x pos=<Wert>". Hat jemand mein Problem verstanden und kann mir helfen? Hier ein MWE:
\documentclass[border=1cm]{standalone}
\usepackage{tikz,pgfplots}

\pgfplotsset{compat=newest}

\begin{document}
\begin{tikzpicture}
\begin{axis}[
	domain=0:1,
	samples=200,
	xtick={0,0.1,...,1.01}, %Zusatzfrage
	ytick={0,0.1,...,1},
	no marks,
]

\addplot [densely dashed] {x};

\addplot {(x^.45)/(x^.45+(1-x)^.45)^(1/.45))} node [pos=.6,below] {I};
\addplot {(x^.61)/(x^.61+(1-x)^.61)^(1/.61))} node [pos=.6,below] {II};
\addplot {(x^.75)/(x^.75+(1-x)^.75)^(1/.75))} node [pos=.6,below] {III};

\end{axis}
\end{tikzpicture}
\end{document}
Zusatzfrage: Warum verschwindet der letzte y-Tick, wenn ich wie im Code explizit angebe, wie die Ticks laufen sollen? Um das Problem zu umgehen, verwende ich bis dato immer einen leicht höheren Wert für den letzten Tick, damit er erscheint. In diesem Fall erscheint der x-Tick bei 1, nicht aber der y-Tick.

Bild
Dateianhänge
Clipboard01.jpg
Clipboard01.jpg (48.64 KiB) 1438 mal betrachtet

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag von esdd »

Hier ist mal ein Vorschlag:
\documentclass[border=1cm]{standalone} 
\usepackage{pgfplots}% lädt auch tikz
\pgfplotsset{compat=newest}

\pgfset{
  declare function={
    myfunction(\x,\parameter) = (\x^\parameter)/(\x^\parameter+(1-\x)^\parameter)^(1/\parameter));
  },
}
\begin{document} 
\begin{tikzpicture} 
\begin{axis}[ 
   domain=0:1, 
   samples=200,
   xtick={0,0.1,...,1.01}, %Zusatzfrage 
   ytick={0,0.1,...,1},
   no marks, 
] 

\addplot [densely dashed,samples=2] {x};

\addplot {myfunction(x,.45)}node[below,font=\tiny] at(.8,{myfunction(.8,.45)}){I};
\addplot {myfunction(x,.61)}node[below,font=\tiny] at(.8,{myfunction(.8,.61)}){II};
\addplot {myfunction(x,.75)}node[below,font=\tiny] at(.8,{myfunction(.8,.75)}){III};

\end{axis} 
\end{tikzpicture} 
\end{document}
Bild

Zur Zusatzfrage: Das ist der Rechenungenauigkeit von TikZ geschuldet. Du kannst alternativ auch etwas verwenden wie
xtick distance=.1,
xtickmin=0,xtickmax=1,
Dateianhänge
gl_plotbeschr.png
gl_plotbeschr.png (13.36 KiB) 1432 mal betrachtet

mofehl
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 62
Registriert: Mi 27. Aug 2014, 13:07

Beitrag von mofehl »

Hallo esdd,

vielen Dank für Deine Antwort! Dein Vorschlag gefällt mir gut, auch wusste ich nicht, dass man eine Funktion in pgf definieren kann. Zur Zusatzfrage: Lösung gefällt mir auch gut.

LG

Antworten