Eine bessere Zeitleistendarstellung mit Tikz

Eine bessere Zeitleistendarstellung mit Tikz

Ich möchte eine Figur zeichnen, die der untenstehenden handgezeichneten Figur so nahe wie möglich kommt.

Bildbeschreibung hier eingeben

Ich habe Folgendes versucht:

\documentclass[a4paper, 12 pt]{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\usepackage{enumitem}

    \begin{document}
          \begin{figure}
        \setlist[itemize]{nosep, leftmargin=*}
        \begin{tikzpicture}[
            node distance = 0mm and 0.02\linewidth,
            box/.style = {inner xsep=0pt, outer sep=0pt,
                text width=0.32\linewidth,
                align=left, font=\small}
            ]
            \node (n1) [box]
            {   \begin{itemize}
                    \item   Households can produce or consume $x$ with equal probability
                    \item Young entrepreneurs borrow bank deposits to buy $x$ for investment
                    \item Young bankers issue deposits and loans
                \end{itemize}
            };
            \node (n2) [box, below right=of n1.north east]
            {   \begin{itemize}
                    \item  $\frac{1}{4}$ probability of type $l$ consumers
                    \item  $\frac{1}{4}$ probability of type $h$ consumers
                    \item  $\frac{1}{2}$ probability of producers
                \end{itemize}
            };
            \node (n3) [box, below right=of n2.north east]
            {   \begin{itemize}
                    \item   Old entrepreneurs get output, repay loans, consume $x$ and die
                    \item   Old bankers receive loan repayments, consume $x$ and die
                \end{itemize}
            };
            \draw[thick, -latex]    (n1.north west) -- (n3.north east);
            \draw (n1.north) -- + (0,3mm) node[above] {Day};
            \draw (n2.north) -- + (0,3mm) node[above] {Night};
            \draw (n3.north) -- + (0,3mm) node[above] {Day};
        \end{tikzpicture}
      \end{figure}
    \end{document}

Die obigen Codes erzeugen diese Abbildung: Bildbeschreibung hier eingeben

Das ist anders als das, was ich will. Ich möchte das $t$ und $t+1$ einschließen und auch die Markierungen durch die Linie schneiden lassen, damit sie zentriert auf der Linie erscheinen, wenn das Sinn ergibt? Außerdem wäre es wahrscheinlich besser, einen Textblock über der Linie zu haben, wie er auf der handgezeichneten Figur erscheint.

Antwort1

Hier ist ein auf PGFKeys basierender Ansatz, der eine Liste von Einträgen erwartet, in der Sie für jedes Element in der Liste \tikztimelinekeinen oder alle vier Werte top, above, below, festlegen können.bottom

Sie können verwenden, \tikztimelinesetum Standardwerte auf globaler Ebene anzupassen oder das optionale Argument verwenden, \tikztimelineum Werte nur für ein Diagramm festzulegen.

Die Längen segment widthund tick lengthsind individuell anpassbar.

Sie stellen sicher, dass die segment width× Einträge für Ihre Seite nicht zu lang sind.

Code

\documentclass[a4paper, 12pt]{article}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\newcommand*\tikztimelineset{\pgfqkeys{/tikz/timeline}}
\tikztimelineset{
  segment width/.initial=4cm, tick length/.initial=6pt,
  topbot/.style={
    align=flush left,
    text width=\pgfkeysvalueof{/tikz/timeline/segment width}
           -2*(\pgfkeysvalueof{/pgf/inner xsep})},
  top/.initial=, above/.initial=, below/.initial=, bottom/.initial=}
\newcommand*\tikztimeline[2][]{
\begin{tikzpicture}[timeline/every timeline/.try,timeline/.cd,#1]
\foreach[count=\CNT] \elem in {#2}{
  \tikztimelineset{/tikz/style/.expand once=\elem}
  \tikzset{xshift=\CNT*(\pgfkeysvalueof{/tikz/timeline/segment width})}
  \unless\ifnum\CNT=1\relax
  \draw (down:\pgfkeysvalueof{/tikz/timeline/tick length}) -- coordinate (lasttick)
        (  up:\pgfkeysvalueof{/tikz/timeline/tick length});
  \fi
  \node[above] (@above) at (right:{.5*(\pgfkeysvalueof{/tikz/timeline/segment width})})
    {\strut$\pgfkeysvalueof{/tikz/timeline/above}$};
  \node[above, timeline/topbot] at (@above.north) {\pgfkeysvalueof{/tikz/timeline/top}};
  \node[below] (@below) at (@above.south) {\strut\pgfkeysvalueof{/tikz/timeline/below}};
  \node[below, timeline/topbot] at (@below.south) {\pgfkeysvalueof{/tikz/timeline/bottom}};
}
\draw[->] (right:\pgfkeysvalueof{/tikz/timeline/segment width})
      -- ([xshift=\pgfkeysvalueof{/tikz/timeline/segment width}] lasttick);
\end{tikzpicture}}

\tikztimelineset{every timeline/.append style={>=Latex}}

\begin{document}
\tikztimeline{
  {
    top=Households can produce or consume $x$ with equal probabilit.,
    above=t,
    below=Day,
    bottom=Young entrepreneurs borrow bank deposits to buy $x$ for investment.\\
           Young bankers issue deposits and loans.
  }, {
    top=$\frac{1}{4}$ probability of type $l$ consumers.
        $\frac{1}{4}$ probability of type $h$ consumers.
        $\frac{1}{2}$ probability of producers.,
    below=Night
  }, {
    above=t+1,
    below=Day,
    bottom={Old entrepreneurs get output, repay loans, consume $x$ and die.\\
            Old bankers receive loan repayments, consume $x$ and die.}
  }}
\end{document}

Ausgabe

Bildbeschreibung hier eingeben

verwandte Informationen