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

Als Code sieht das ganze so aus:

\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 '17, 10:40

kasiii's gravatar image

kasiii
56157
Akzeptiert-Rate: 0%

bearbeitet 13 Jun '21, 20:29

saputello's gravatar image

saputello
11.1k174365

Willkommen auf TeXwelt!

Sehr gut gestellte Frage mit sehr schönem Minimalbeispiel!

(20 Mär '17, 08: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 '17, 10:04

esdd's gravatar image

esdd
17.8k284257
Akzeptiert-Rate: 62%

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 '17, 14: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 '17, 11:24

gast3's gravatar image

gast3
(ausgesetzt)
Akzeptiert-Rate: 53%

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

(21 Mär '17, 14:08) kasiii
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

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ügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×731
×54
×18
×8

gestellte Frage: 18 Mär '17, 10:40

Frage wurde gesehen: 11,857 Mal

zuletzt geändert: 21 Mär '17, 14:10