Zeitpfeil mit sich entwickelnder „aktueller Position“ mit überlagerter Nummer

Zeitpfeil mit sich entwickelnder „aktueller Position“ mit überlagerter Nummer

Ich zeige Folien, auf denen ich anhand von Schnappschüssen eine zeitliche Entwicklung darstelle. Jeder Schnappschuss entspricht einem bestimmten Zeitpunkt.

Ich möchte einen Zeitpfeil (vertikal an der Seite) mit Aufzählungszeichen anzeigen, die den einzelnen Zeitpunkten entsprechen (ungleichmäßig verteilt). Auf jeder Überlagerung ist eines dieser Aufzählungszeichen ausgefüllt und die aktuelle Zeit angegeben, während die anderen Aufzählungszeichen offen sind (leere Kreise).

Ich denke, dass ich die unanimatisierte Version ganz einfach mit erstellen kann tikz, bin mir aber nicht sicher, wie ich den Stil der Elemente und das Vorhandensein von Knotentext je nach Overlay-Nummer anpassen kann.

Hier ist ein MWE für einen statischen Zeitpfeil:

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{tikzpicture}
  \def\axscale{-0.02}
  \def\thex{0}
  \def\they{0}
  \def\prevy{0}
  \def\times{{-5,2, 12, 22, 32, 44, 76, 116, 182, 300,307}}
  \def\maxt{9}
  \foreach \it in {1,...,\maxt} {
        \pgfmathparse{\axscale*\times[\it-1]}
        \pgfmathsetmacro{\prevy}{\pgfmathresult}
        \pgfmathparse{\axscale*\times[\it]}
        \pgfmathsetmacro{\they}{\pgfmathresult}
        \draw[-{Circle[open]}] (\thex,\prevy) -- (\thex,\they);
        \node[right,anchor=west] at (\thex,\they) {
            $t=\pgfmathparse{\times[\it]}
            \pgfmathprintnumber[    % Print the result
                fixed,
                fixed zerofill,
                precision=0,
                assume math mode=true
            ]{\pgfmathresult}
            $};
  }
  \pgfmathparse{\axscale*\times[\maxt]}
  \pgfmathsetmacro{\prevy}{\pgfmathresult}
  \pgfmathparse{\axscale*\times[\maxt+1]}
  \pgfmathsetmacro{\they}{\pgfmathresult}
  \draw[->] (\thex,\prevy) -- (\thex,\they);
  %\draw(\thex,\prevy) -- (\thex+5,\they);
\end{tikzpicture}
\end{document}

Geben Sie an, welche Elemente animiert werden sollen Circle[open]und ob die t=...Beschriftung angezeigt werden soll.

Antwort1

Ich glaube, Sie haben Ihre Antwort, d. h. verwenden Sie EbenenmitTikZ, und beide Antworten zeigen, wie das geht.

Ich möchte eine andere Möglichkeit zeigen, diese Zeitleiste zu zeichnen, indem ich ein paar Goodies verwende, die TikZ zu bieten hat, vor allemder /tikz/ySchlüsselHier können Sie die Länge und Richtung desjAchse derxyzKoordinatensystem (das ohne Einheiten).

Anstatt zu verwenden, \axscalekönnen Sie einfach yauf setzen -0.02cm(wobei der Standardwert 1cm ist) und TikZ multipliziert Ihren Wert, um ihn in denLeinwandKoordinatensystem (das mit den Einheiten, bei denenjzeigt immer noch nach oben).

Dann gibt es noch diechainsBibliothek die ich eigentlich nur verwende, um Knoten zu verbinden, indem ich sie nicht habegeh irgendwohin. Dazu setze ich einen Startpunkt, der 1mmüberT= 0 und fügen Sie außerdem einen letzten Punkt hinzu, der immer 1,4 mm unter dem letzten liegtT. (Wenn der obere Anfang der Linie einen festen Abstand über dem ersten haben soll,Teine Anpassung ist hier notwendig.) Auch der letzte wird mit verbunden, ->so dass wir die eigentliche Pfeilspitze erhalten.

Apropos Pfeilspitzen, während dieCircleTippscheint eine nette Sache zu sein, sie berühren nur die angegebene Koordinate, anstatt auf ihr zentriert zu liegen. Dies kannFest, obwohl ich hier einfach Kreisknoten verwenden würde.

Um den Diagrammbeamer bekannt zu machen, klaue ich die <.>Syntax vonSam Carters Antwortzu haben,labelgleichzeitig mit dem Füllen des Knotens angezeigt. Da ich als Referenz einen Kreisknoten anstelle einer Pfeilspitze verwende, wird der Knoten meiner Meinung nach viel besser ausgerichtet.

Wir könnten auch das labelzu dem hinzufügen fill, also

alt=<+>{fill, label={$t = \t$}}{}

allerdings wird das Bild dadurch hin und her springen, es sei denn, die Beschriftung würde nicht mehr zum Begrenzungsrahmen beitragen.
Da die visible onLösung von overlay-beamer-stylesversteckten Text im Rahmen belässt (der ausgewählt und kopiert werden kann), verwende ich Beamers eigene Methode, \uncoverum den Text zu verbergen.

Code

\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{arrows.meta, chains, overlay-beamer-styles}
\begin{document}
\begin{frame}
\begin{itemize}[<+->]
\item First.
\item Second.
\end{itemize}

\begin{tikzpicture}[
  y=-.02cm, thick, label position=right, start chain = going {},
  dot/.style={circle, draw, inner sep=+0pt, minimum size=+1.3mm}]
\coordinate[on chain]() at (0, 1mm); % a start (for the line)
\foreach \t in {2, 12, 22, 32, 44, 76, 116, 182, 300}
  \node[dot, on chain, join, alt=<+>{fill},
    label/.expanded={$\uncover<.>{t = \t}$}, % no hidden text in output
%    label={[visible on=<.>]$t = \t$},       % hidden text in output
  ] at (0, \t) {};
% and an end that is below the last dot
\coordinate[on chain, join=by ->]() at ([yshift=-1.4mm] chain-end.south);
\end{tikzpicture}
\end{frame}
\end{document}

Ausgabe (klicken für Vollversion)

Miniaturansicht zur vollständigen Datei

Antwort2

Sie können sich die Tatsache zunutze machen, dass Tikz-Befehle wie \drawOverlay-fähig sind:

\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}

\begin{document}
\begin{frame}
\begin{tikzpicture}
  \def\axscale{-0.02}
  \def\thex{0}
  \def\they{0}
  \def\prevy{0}
  \def\times{{-5,2, 12, 22, 32, 44, 76, 116, 182, 300,307}}
  \def\maxt{9}
  \foreach \it in {1,...,\maxt} {
        \pgfmathparse{\axscale*\times[\it-1]}
        \pgfmathsetmacro{\prevy}{\pgfmathresult}
        \pgfmathparse{\axscale*\times[\it]}
        \pgfmathsetmacro{\they}{\pgfmathresult}
        \draw[-{Circle[open]}] (\thex,\prevy) -- (\thex,\they);
        \draw<+(2)>[-{Circle}] (\thex,\prevy) -- (\thex,\they);
        \node<.(2)>[right,anchor=west] at (\thex,\they) {
            $t=\pgfmathparse{\times[\it]}
            \pgfmathprintnumber[    % Print the result
                fixed,
                fixed zerofill,
                precision=0,
                assume math mode=true
            ]{\pgfmathresult}
            $};
  }
  \pgfmathparse{\axscale*\times[\maxt]}
  \pgfmathsetmacro{\prevy}{\pgfmathresult}
  \pgfmathparse{\axscale*\times[\maxt+1]}
  \pgfmathsetmacro{\they}{\pgfmathresult}
  \draw[->] (\thex,\prevy) -- (\thex,\they);
  %\draw(\thex,\prevy) -- (\thex+5,\they);
\end{tikzpicture}
\end{frame}
\end{document}

Bildbeschreibung hier eingeben

Antwort3

Mithilfe der großartigen overlay-beamer-stylesBibliothek können Sie Folgendes tun:

\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\usetikzlibrary{overlay-beamer-styles}

\begin{document}
\begin{frame}

\begin{tikzpicture}
  \def\axscale{-0.02}
  \def\thex{0}
  \def\they{0}
  \def\prevy{0}
  \def\times{{-5, 2, 12, 22, 32, 44, 76, 116, 182, 300, 307}}
  \def\maxt{9}
  \foreach \it in {1,...,\maxt} {
        \pgfmathparse{\axscale*\times[\it-1]}
        \pgfmathsetmacro{\prevy}{\pgfmathresult}
        \pgfmathparse{\axscale*\times[\it]}
        \pgfmathsetmacro{\they}{\pgfmathresult}
        \draw[alt={<\it>{-{Circle[]}}{-{Circle[open]}}}] (\thex,\prevy) -- (\thex,\they);
        \node[right,anchor=west] at (\thex,\they) {
            $t=\pgfmathparse{\times[\it]}
            \pgfmathprintnumber[    % Print the result
                fixed,
                fixed zerofill,
                precision=0,
                assume math mode=true
            ]{\pgfmathresult}
            $};
  \pgfmathparse{\axscale*\times[\maxt]}
  \pgfmathsetmacro{\prevy}{\pgfmathresult}
  \pgfmathparse{\axscale*\times[\maxt+1]}
  \pgfmathsetmacro{\they}{\pgfmathresult}
  \draw[->] (\thex,\prevy) -- (\thex,\they);
  }
  %\draw(\thex,\prevy) -- (\thex+5,\they);
\end{tikzpicture}

\end{frame}
\end{document}

Bildbeschreibung hier eingeben

Oder Sie können es alt={<\it>{-{Circle[]}}{-{Circle[open]}}}durch ersetzen alt={<\it->{-{Circle[]}}{-{Circle[open]}}}(d. h., Sie fügen -nach \it) hinzu, wenn die vorherigen Punkte ausgefüllt bleiben sollen.

verwandte Informationen