Ich möchte folgendes Diagramm mit TikZ nachzeichnen. alt text

Als Code sieht das ganze so aus:

Öffne in Overleaf
\documentclass{standalone}

\usepackage{tikz}

\begin{document}
    \begin{tikzpicture}[]
    \draw[help lines, color=green!60!black, xstep=.5cm] (-.2,-.2) grid (4.5,3.75);

    \draw[->] (0,-.5) -- (0,4.25) node [left=1ex, align=right] {$s$\\ in km};
    \draw[->] (-.5,0) -- (5,0) node [below=1ex, align=left] {$t$\\ in h};

    \foreach \x in {1,2,...,4}
    \node [below=1ex] at (\x,0) {\x};

    \foreach \y in {3,6,9}
    \node [left=1ex] at (0,\y/3) {\y};

    \coordinate (A) at (0,1);
    \coordinate (B) at (1,2);
    \coordinate (C) at (1.5,3);
    \coordinate (D) at (2.2,3);
    \coordinate (E) at (2.5,2);
    \coordinate (F) at (4,0);

    \draw[color=magenta!80!yellow, very thick] (A) -- (B) -- (C) --(D) -- (E) -- (F);

    \filldraw[black] (A) circle (2pt);
    \filldraw[black] (B) circle (2pt);
    \filldraw[black] (C) circle (2pt);
    \filldraw[black] (D) circle (2pt);
    \filldraw[black] (E) circle (2pt);
    \filldraw[black] (F) circle (2pt);
    \end{tikzpicture}
\end{document}

alt text

Zwei Dinge würde ich an meinem Diagramm gerne Verbessern:

  1. Das grid soll trotz der unterschiedlichen Achsenskalierung quadratisch sein.
  2. Die Koordinaten der Punkte entsprechen zumindest auf der vertikalen Achse nicht der Beschriftung. Der Punkt (1|6) im Bild entspricht im Code (1|2), das würde ich gerne angleichen.

gefragt 18 Mär, 05:40

kasiii's gravatar image

kasiii
512
Akzeptiert: 50%

bearbeitet 18 Mär, 10:48

Clemens's gravatar image

Clemens
20.0k113360

Willkommen auf TeXwelt!

Sehr gut gestellte Frage mit sehr schönem Minimalbeispiel!

(20 Mär, 03:26) saputello

Du kannst einfach die Länge der y Einheit gleich einem Drittel eines Zentimeters setzen: y={1cm/3}:

Öffne in Overleaf
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
    \begin{tikzpicture}[y={1cm/3}]% <- y-Einheit nur 1cm/3 statt 1cm
    \draw[help lines, color=green!60!black, step=0.5cm] (-.2,-.2) grid (4.5,10);

    \draw[->] (0,-.5) -- (0,12) node [left=1ex, align=right] {$s$\\ in km};
    \draw[->] (-.5,0) -- (5,0) node [below=1ex, align=left] {$t$\\ in h};

    \foreach \x in {1,2,...,4}
      \node [below=1ex] at (\x,0) {\x};

    \foreach \y in {3,6,9}
      \node [left=1ex] at (0,\y) {\y};

    \coordinate (A) at (0,3);
    \coordinate (B) at (1,6);
    \coordinate (C) at (1.5,9);
    \coordinate (D) at (2.2,9);
    \coordinate (E) at (2.5,6);
    \coordinate (F) at (4,0);

    \draw[color=magenta!80!yellow, very thick] (A) -- (B) -- (C) --(D) -- (E) -- (F);

    \foreach \p in {A,B,C,D,E,F}
      \filldraw[black] (\p) circle [radius=2pt];
    \end{tikzpicture}
\end{document}

alt text

Permanenter link

beantwortet 21 Mär, 05:04

esdd's gravatar image

esdd
15.5k53753

Vielen Dank! Diese Lösung gefällt mir gut. Da ich zu faul bin, eine Skalierung an die Achsen zu zeichnen lasse ich das grid überstehen. Wenn man die Längenangabe in pt umschreibt sind die Striche der Skaleneinteilung für die s und t Achse auch gleich lang:

Öffne in Overleaf
  \draw[help lines, color=green!60!black, step=0.5cm] (-2pt,-2pt) grid (4.5,10);
(21 Mär, 09:10) kasiii

Skalieren ist immer möglich und natürlich kann man dabei auch gleich die Koordinaten anpassen:

Öffne in Overleaf
\documentclass{standalone}

\usepackage{tikz}

\begin{document}
    \begin{tikzpicture}[yscale=0.167]
    \draw[help lines, color=green!60!black, xstep=0.5cm, ystep=3cm] (-.2,-.2) grid (4.5,10);

    \draw[->] (0,-.5) -- (0,12) node [left=1ex, align=right] {$s$\\ in km};
    \draw[->] (-.5,0) -- (5,0) node [below=1ex, align=left] {$t$\\ in h};

    \foreach \x in {1,2,...,4}
    \node [below=1ex] at (\x,0) {\x};

    \foreach \y in {3,6,9}
    \node [left=1ex] at (0,\y) {\y};

    \coordinate (A) at (0,3);
    \coordinate (B) at (1,6);
    \coordinate (C) at (1.5,9);
    \coordinate (D) at (2.2,9);
    \coordinate (E) at (2.5,6);
    \coordinate (F) at (4,0);

    \draw[color=magenta!80!yellow, very thick] (A) -- (B) -- (C) --(D) -- (E) -- (F);

    \filldraw[black] (A) circle (2pt);
    \filldraw[black] (B) circle (2pt);
    \filldraw[black] (C) circle (2pt);
    \filldraw[black] (D) circle (2pt);
    \filldraw[black] (E) circle (2pt);
    \filldraw[black] (F) circle (2pt);
    \end{tikzpicture}
\end{document}

Allerdings sind jetzt natürlich die Kreise (circle) überhaupt nicht mehr rund. Das könnte man vermutlich dadurch lösen, dass man mit scope arbeitet und Kreise so eben nicht skaliert oder man könnte statt Kreise Ovale zeichnen, die die Skalierung ausgleichen, oder man skaliert eben die Kreise wieder in Gegenrichtung:

Öffne in Overleaf
\documentclass{standalone}

\usepackage{tikz}

\begin{document}
    \begin{tikzpicture}[yscale=0.167]
    \draw[help lines, color=green!60!black, xstep=0.5cm, ystep=3cm] (-.2,-.2) grid (4.5,10);

    \draw[->] (0,-.5) -- (0,12) node [left=1ex, align=right] {$s$\\ in km};
    \draw[->] (-.5,0) -- (5,0) node [below=1ex, align=left] {$t$\\ in h};

    \foreach \x in {1,2,...,4}
    \node [below=1ex] at (\x,0) {\x};

    \foreach \y in {3,6,9}
    \node [left=1ex] at (0,\y) {\y};

    \coordinate (A) at (0,3);
    \coordinate (B) at (1,6);
    \coordinate (C) at (1.5,9);
    \coordinate (D) at (2.2,9);
    \coordinate (E) at (2.5,6);
    \coordinate (F) at (4,0);

    \draw[color=magenta!80!yellow, very thick] (A) -- (B) -- (C) --(D) -- (E) -- (F);

    \filldraw[black,yscale=6] (A) circle (2pt);
    \filldraw[black,yscale=6] (B) circle (2pt);
    \filldraw[black,yscale=6] (C) circle (2pt);
    \filldraw[black,yscale=6] (D) circle (2pt);
    \filldraw[black,yscale=6] (E) circle (2pt);
    \filldraw[black,yscale=6] (F) circle (2pt);
    \end{tikzpicture}
\end{document}
Permanenter link

beantwortet 18 Mär, 06:24

Ijon%20Tichy's gravatar image

Ijon Tichy
5.5k1919

Danke für die Antwort. Mit der Skalierung habe ich auch schon herumgespielt, allerdings hat mich die Verzerrung abgeschreckt.

(21 Mär, 09:08) kasiii
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs füge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×533
×16
×2
×2

Frage gestellt: 18 Mär, 05:40

Frage wurde angeschaut: 879 Mal

Zuletzt aktualisiert: 21 Mär, 09:10