Hallo, ich bin gerade am verzweifeln. Ich möchte ein Balkendiagramm mit tikz, pgfplots erstellen. Zu jedem Wert gibt es drei Balken. Das Problem ist, dass ich den Abstand zwischen den beiden Plots nicht verkürzen kann. Ich würde gerne den weißen Abstand in der Mitte verkleinern, weiß aber nicht wie. Kann mir jemand helfen?

Mein Code:

Open in Online-Editor
\documentclass{scrartcl} 
\usepackage[ngerman]{babel} 
\usepackage{tikz}
\usepackage{pgfplots} 
\pgfplotsset{compat=1.9} 
\usepackage{pgfplotstable}

\begin{document}

\begin{tikzpicture}
\begin{axis}[
    x tick label style={
        /pgf/number format/1000 sep=},
    ylabel=Population,
    enlargelimits=0.15,
    ybar,
    bar width=7pt,
    xtick={1930,1940},
    xmin=1930, xmax=1940
]
\addplot 
    coordinates {(1930,50e6) (1940,33e6)};

\addplot 
    coordinates {(1930,38e6) (1940,42e6)};

\addplot 
    coordinates {(1930,15e6) (1940,12e6)};

\addplot[red,sharp plot,update limits=false] 
    coordinates {(1910,4.3e7) (1990,4.3e7)} 
    node[above] at (axis cs:1950,4.3e7) {Houses};
\end{axis}
\end{tikzpicture}

\end{document}

Das Liefert folgendes:

Ist

Ich hätte gerne aber soetwas:

Soll

Ich hoffe ihr könnt mir helfen.

gefragt 18 Jul, 10:34

DerMetzger's gravatar image

DerMetzger
812
Akzeptiert: 0%

bearbeitet 18 Jul, 12:20

saputello's gravatar image

saputello
18.4k22352

Sobald Du 60 Punkte erreicht hast, Bilder bitte direkt hier hochladen und einbinden. Das geht dann über das Foto-Symbol in der Toolbar ganz einfach. Wenn Du weiter Fragen mit klarer Problembeschreibung und ordentlichem Minimalbeispiel stellst, wirst Du die dafür notwendigen Punkte sicher schnell zusammen haben. Ich würde Dir für diese gut gestellte erste Frage gerne ein paar Punkte schenken. Leider kann man das nur für Antworten.

(18 Jul, 12:23) saputello

Du musst nur die Größe des Plots ändern. Ich habe

Open in Online-Editor
enlarge x limits=0.5,
width=5cm, height=\axisdefaultheight,

gewählt. Das enlarge x limits=0.5 ist dazu da, dass die Balken nicht rauslaufen und verschwinden. Bei height kann man natürlich auch eine explizit Höhe eintragen, \axisdefaultheight ist halt der Standard.

Möchte man die Größe nicht ändern, so kann man natürlich einfach die Limits der x-Achse vergrößern, zum Beispiel xmin=1920, xmax=1950.

Open in Online-Editor
\documentclass{article} 
\usepackage{pgfplots} 
\pgfplotsset{compat=1.9}

\begin{document}

\begin{tikzpicture}
  \begin{axis}[
    x tick label style={
      /pgf/number format/1000 sep=},
    ylabel=Population,
    enlargelimits=0.15,
    ybar,
    bar width=7pt,
    xtick={1930,1940},
    xmin=1930, xmax=1940,
    %---
    enlarge x limits=0.5,
    width=5cm, height=\axisdefaultheight,
    ]
    \addplot 
      coordinates {(1930,50e6) (1940,33e6)};

    \addplot 
      coordinates {(1930,38e6) (1940,42e6)};

    \addplot 
      coordinates {(1930,15e6) (1940,12e6)};

    \addplot[red,sharp plot,update limits=false] 
      coordinates {(1910,4.3e7) (1990,4.3e7)} 
      node[above] at (axis cs:1950,4.3e7) {Houses};
  \end{axis}
\end{tikzpicture}

\end{document}

alt text

Permanenter link

beantwortet 18 Jul, 10:50

Henri's gravatar image

Henri
10.0k31730

bearbeitet 18 Jul, 10:51

Super! Vielen Dank, das löst jetzt mein Problem für symbolic x coords Danke

(18 Jul, 11:07) DerMetzger

Eine weitere Möglichkeit wäre, eine Länge für eine x-Einheit vorzugeben:

Open in Online-Editor
x=5pt,% hier mindestens 2.7pt
enlarge x limits={abs=25pt},% hier mind. 12.5pt

alt text

Open in Online-Editor
\documentclass{scrartcl} 
\usepackage[ngerman]{babel} 
\usepackage{pgfplots}% lädt auch tikz
\pgfplotsset{compat=1.9} 
\begin{document}
\begin{tikzpicture}
\begin{axis}[
    x=5pt,
    enlarge x limits={abs=25pt},
    x tick label style={/pgf/number format/1000 sep=},
    ylabel=Population,
    ybar,
    bar width=7pt,
    xtick={1930,1940},
    xmin=1930, xmax=1940
]
\addplot coordinates {(1930,50e6) (1940,33e6)};
\addplot coordinates {(1930,38e6) (1940,42e6)};
\addplot coordinates {(1930,15e6) (1940,12e6)};

\addplot[red,sharp plot,update limits=false] 
    coordinates {(1910,4.3e7) (1990,4.3e7)} 
    %node[above] at (axis cs:1950,4.3e7) {Houses}% außerhalb des Plotbereiches
    ;
\end{axis}
\end{tikzpicture}
\end{document}

Die Werte ergeben sich aus folgenden Überlegungen: Du hast drei Plots bei denen die Balken jeweils 7pt breit sind. Außerdem ist zwischen den Balken, die zum gleichen x- Wert gehören ein Abstand von 2pt. Die drei Balken einschließlich der Abstände haben also eine Breite von 25pt. Wenn der Abstand zwischen den Balkengruppen genauso groß sein soll, dann braucht man also 50pt. Zwischen den beiden Ticks bei 1930 und 1940 liegen 10 x-Einheiten. Somit müsste eine x-Einheit 5pt breit sein.

Da die Breite der Balken beim Ermitteln der nötigen Breite für den Plot nicht berücksichtigt wird, muss über enlarge x limits dafür gesorgt werden, dass die Balken nicht abgeschnitten werden. Diese zusätzliche Breite muss mindestens so groß sein wie die halbe Breite einer Balkengruppe. Hier also mindestens 12.5pt. Damit sie auch nicht ganz am Rand kleben, habe ich 25pt verwendet.


Das funktioniert auch mit symbolischen Koordinaten. Dann entspricht eine x-Einheit dem Abstand von zwei aufeinanderfolgenden Koordinaten. Im folgenden Beispiel wird deshalb x=50pt verwendet.

Open in Online-Editor
\documentclass{scrartcl} 
\usepackage[ngerman]{babel} 
\usepackage{pgfplots}% lädt auch tikz
\pgfplotsset{compat=1.9} 
\begin{document}
\begin{tikzpicture}
\begin{axis}[
    x=50pt,
    enlarge x limits={abs=25pt},
    x tick label style={/pgf/number format/1000 sep=},
    ylabel=Population,
    ybar,
    bar width=7pt,
    symbolic x coords={left,1930,1940,right},
    xtick=data
]
\addplot coordinates {(1930,50e6) (1940,33e6)};
\addplot coordinates {(1930,38e6) (1940,42e6)};
\addplot coordinates {(1930,15e6) (1940,12e6)};

\addplot[red,sharp plot,update limits=false] 
    coordinates {(left,4.3e7) (right,4.3e7)} 
    ;
\end{axis}
\end{tikzpicture}
\end{document}
Permanenter link

beantwortet 18 Jul, 19:18

esdd's gravatar image

esdd
14.2k53251

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

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

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:

×160
×4
×3
×1

Frage gestellt: 18 Jul, 10:34

Frage wurde angeschaut: 648 Mal

Zuletzt aktualisiert: 18 Jul, 19:18