Hallo. Ich habe versucht, eine Wahrscheinlichkeitsfunktion und die dazugehörige Verteilungsfunktion in zwei verschiedenen Koordinatensystemen darzustellen. Die Wahrscheinlichkeitsfunktion hat auch wunderbar funktioniert, jedoch gibt es Probleme bei der Verteilungsfunktion. Ich möchte eine Schleife erstellen, die in jedem Durchlauf einen Teil der Funktion zeichnet, genauer gesagt die Zuordnung x-->F(x). Das Problem ist nun aber, dass der Wert F(x) auf den vorigen Werten immer aufbaut. D.h. ich brauche eine Möglichkeit, um diesen Wert zu speichern und für den nächsten Schleifendurchgang verwenden zu können. Ich habe bereits einiges versucht, aber es scheinen foreach- Schleifen nicht in der axis-Umgebung zu funktionieren. Ich habe jetzt auch viel zu diesen pgfplotsinvokeforeach- Schleifen gelesen, aber bisher konnte ich noch keine Lösung auf das Problem finden. Ich habe hier etwas erstellt, was zwar allem Anschein nach den Wert speichert (wobei ich mir da auch nicht so sicher bin), jedoch verändert das gleichzeitig auch alle anderen Werte aus vorigen Schleifendurchgängen, was dafür sorgt, dass sich alle Werte verschieben und auf eine Höhe kommen, was nicht sein sollte. Hier wäre mal so das Minimalbeispiel: Öffne in Overleaf
\documentclass{article} \usepackage{tikz} \usetikzlibrary{calc} \usepackage{pgfplots} \begin{document} \begin{figure}[h] \begin{minipage}{0.5\textwidth} \centering \begin{tikzpicture} \begin{axis}[ axis lines=middle, xmin=0, xmax=5, height=6cm, width=8cm, ymin=0, ymax=0.4, xlabel=$x$, ylabel=$p_i$, xlabel style=right, ylabel style=above, enlargelimits=0.05, ] \draw[fill=red!20!white] \foreach \i in {1,...,5 }{ (axis cs:{\i-0.5},{0}) rectangle (axis cs:{\i+0.5},{0.25*exp((\i-1)*ln(0.75))}) }; %Rechtecke; es gilt: P(X=k)=p(1-p)^(k-1) \end{axis} \end{tikzpicture} \end{minipage} \begin{minipage}{0.5\textwidth} \centering \begin{tikzpicture} \begin{axis}[ axis lines=middle, xmin=0, xmax=6, height=6cm, width=8cm, xlabel=$x$, ylabel=$F(x)$, xlabel style=right, ylabel style=above, enlargelimits=0.05, ymin=0, ymax=1.5 ] \pgfmathsetmacro{\LastHeight}{0} \pgfplotsinvokeforeach{1,...,5}{ \pgfmathsetmacro{\ActualHeight}{0.25*exp((#1-1)*ln(0.75))+\LastHeight} \draw[red,thick](axis cs:{#1},{\ActualHeight}) -- (axis cs:{#1+0.5},{\ActualHeight}); \global\let\LastHeight\ActualHeight } \end{axis} \end{tikzpicture} \end{minipage} \end{figure} \end{document} Ich hoffe sehr, dass meine Frage verständlich formuliert ist. Vielen Dank für die Antworten und viele Grüße! gefragt 05 Jan '19, 22:50 Lilanarus |
Öffne in Overleaf
\documentclass{article} \usepackage{tikz} \usetikzlibrary{calc} \usepackage{pgfplots} \begin{document} \begin{figure}[h] \begin{minipage}{0.5\textwidth} \centering \begin{tikzpicture} \begin{axis}[ axis lines=middle, xmin=0, xmax=5, height=6cm, width=8cm, ymin=0, ymax=0.4, xlabel=$x$, ylabel=$p_i$, xlabel style=right, ylabel style=above, enlargelimits=0.05, ] \draw[fill=red!20!white] \foreach \i in {1,...,5 }{ (axis cs:{\i-0.5},{0}) rectangle (axis cs:{\i+0.5},{0.25*exp((\i-1)*ln(0.75))}) }; %Rechtecke; es gilt: P(X=k)=p(1-p)^(k-1) \end{axis} \end{tikzpicture} \end{minipage} \begin{minipage}{0.5\textwidth} \centering \begin{tikzpicture} \begin{axis}[ axis lines=middle, xmin=0, xmax=6, height=6cm, width=8cm, xlabel=$x$, ylabel=$F(x)$, xlabel style=right, ylabel style=above, enlargelimits=0.05, ymin=0, ymax=1.5 ] \pgfplotsinvokeforeach{1,...,5}{ \pgfmathsetmacro{\ActualHeight}{#1*0.25*exp((#1-1)*ln(0.75))} \edef\next{\noexpand\draw[red,thick](axis cs:{#1},\ActualHeight) -- (axis cs:{#1+0.5},\ActualHeight);} \next } \end{axis} \end{tikzpicture} \end{minipage} \end{figure} \end{document} beantwortet 06 Jan '19, 15:24 Ulrike Fischer Guten Tag. Vielen Dank für die Antwort, inzwischen (nach etlichen Stunden) habe ich es selbst geschafft, eine Lösung zu finden. Ich habe herausgefunden, dass man auch eine foreach- Schleife in axis benutzen kann, wenn man nur einen addplot Befehl darin stehen hat. Pgfmacros können dann auch hinzugefügt werden. Als Plot nehme ich dann einfach ActualHeight und damit die Linie nur eine Einheit lang ist, stelle ich die Domain entsprechend ein.
(06 Jan '19, 15:31)
Lilanarus
Ich empf. die mehrfach benutzten Einstellungen mit
(07 Jan '19, 16:06)
cis
|
Der Standard Trick ist so was wie
\edef\temp{\noexpand\addplot ...
, siehe z.B. hier. (Es gibt da auch eine Antwort von Christian Feuersänger, nur finde ich die grad nicht.)