Hopfen

tutorials :: Säulen- und Balkendiagramme

Inhalt

Ein sehr einfaches tutorium zur Erstellung von Säulendiagrammen.

Worauf zu achten ist

Bei einem Balkendiagramm soll die Länge der Balken proportional zur absoluten bzw. relativen Häufigkeit sein; bei einem Säulendiagramm dementsprechend die Höhen der Säulen. Pseudo-3D-Diagramme sind - mögen sie auch noch so gut aussehen - nicht zu empfehlen, da sie die Darstellung zum Teil sehr verzerren und die Grafik überladen können. Eine Verzerrung tritt vor Allem dann auf, wenn z.B. statt Säulen zur Fragestellung passende Figuren verwendet werden, deren Größen den Häufigkeiten oft nicht mehr gerecht werden. Generell sollte man Wert auf das Wesentliche legen: eine einfache aber genaue Darstellung der interessierenden Häufigkeiten. Man sollte deshalb die Verwendung von grafischen Besonderheiten auf ein Minimum beschränken oder am besten ganz unterlassen.

Die Konstruktion

Wir beschränken uns hier auf die Darstellung eines Säulendiagramms. Die Konstruktion eines Säulendiagramms in LaTeX bietet sich nur dann an, wenn man relativ wenig Säulen darstellen will, da man die erforderlichen Höhen der Säulen per Hand eingeben muss und das wiederum recht viel Zeit beanspruchen kann.

Als Beispiel betrachten wir die Wachstumsraten des realen Bruttoinlandsproduktes (BIP) der zehn bevölkerungsreichsten Staaten der Europäischen Union (EU) im Jahr 2005.
Land Wachstumsrate des BIP in %
Deutschland 0.9
Frankreich 1.2
Großbritannien 1.9
Italien 0.1
Spanien 3.5
Polen 3.5
Rumänien 4.1
Niederlande 1.5
Griechenland 3.7
Portugal 0.5
Die Daten findet man auf den Seiten der Eurostat wieder.

Bei größeren Prozenten oder Häufigkeiten müsste man evtl. die Daten geeignet skalieren, damit das Säulendiagramm überhaupt in das gewünschte Dokument passt. Die vorliegenden Wachstumsraten sind zum Glück recht klein, weshalb uns dieser Schritt erspart wird. Demzufolge brauchen wir uns um die Einteilung und Skalierung der Ordinate nicht zu kümmern.

Die Achsen


Bei der Gestaltung der Achsen sind der Kreativität keine Grenzen gesetzt. Ob das Diagramm von einer Box eingeschlossen ist oder einfach nur zwei Achsen vorhanden sind, Hauptsache es ist Platz für eine ausreichende Beschriftung. Ich habe mich für zwei einfache Achsen entschieden, deren Stil an Säulendiagramme von statistischen Programmpaketen wie R erinnert.

Bevor es aber weiter geht, müssen wir uns Gedanken um die Länge der Achsen machen. Wie bereits erwähnt, ist das bei der Ordiante nicht das Problem. Sie sollte nämlich nur etwas Größer als die höchste Säule sein. Rumänien hat mit 4.1 % die größte Wachstumsrate, also auch die höchste Säule. Mit einer Höhe der Ordinate von 4.5 cm sind wir also ganz gut bedient. Nun zur Abzisse. Wir betrachten zehn Länder, haben also auch zehn Säulen. Als Breite der Säulen kann man sich auf 1 cm einigen, das ist nicht zu dick und nicht zu dünn. Da wir kein Histogramm erstellen wollen, sind wir auch an einem Abstand zwischen den Säulen interessiert. Diesen setzen wir auf 0.5 cm. Die Abzisse bekommt daher eine Länge von 15.5 cm. Alle Linien werden mit dem draw Befehl gezeichnet. Hier nun die Achsen.

\begin{tikzpicture}
 
  \draw (0cm,0cm) -- (15.5cm,0cm);  %Abzisse
  \draw (0cm,0cm) -- (0cm,-0.1cm);
  \draw (15.5cm,0cm) -- (15.5cm,-0.1cm);
  
  \draw (-0.1cm,0cm) -- (-0.1cm,4.5cm);  %Ordinate
  \draw (-0.1cm,0cm) -- (-0.2cm,0cm); 
  \draw (-0.1cm,4.5cm) -- (-0.2cm,4.5cm) node [left] {\%};

\end{tikzpicture}
    

back to top

Vom Punkt (0,0) aus wird die Abzisse 15.5 cm nach rechts gezeichnet. Eine durchgzogene Linie wird mit der zusätzlichn Angabe von "--" erzeugt. Die Angabe von "cm" kann hier auch weggelassen werden. Damit das ganze etwas moderner wirkt, wird an beiden Enden ein Strich mit einer Länge von 0.1 cm nach unten gesetzt. Die Beschriftung der Abzisse erfolgt zusammen mit den Säulen. Da die Achsen nicht so aneinander kleben sollen, beginnt die Ordinate im Punkt (-0.1,0) und wird dann 4.5 cm nach oben gezeichnet. Auch sie erhält tolle Striche an beiden Enden sowie die Beschriftung " % ". Die restliche Beschriftung der Ordinate erfolgt mit der Konstruktion des Hintergrunds.

Der Hintergrund


Bei einem Säulendiagramm empfiehlt es sich generell Hilfslinien einzuzeichnen. Unsere Hilfslinien sollen die ganzen Prozente repräsentieren, also 1, 2, 3 und 4. Damit sie die Grafik nicht dominieren, wählen wir als Farbe ein dezentes Grau, d.h. eine Mischung aus 50 % Grau und 50 % Weiß: gray!50!white oder kurz gray!50. Die Linien sollen soweit wie die Abzisse gehen, jedoch schon vor der Ordinate anfangen, damit eine gute Beschriftung möglich ist. Eine Hilfslinie mit der Farbe Grau und einer Länge von 15.7 cm erhalten wir wieder mit dem draw Befehl:
  \draw[gray!50] (-0.2cm,1cm) -- (15.5cm,1cm);
    
Die Achsenbeschriftung können wir mit dem node Befehl einfach hinzufügen. Dazu müssen wir allerdings die Textfarbe auf Schwarz setzen, da sonst das Grau verwendet wird:
  \draw[gray!50, text=black] (-0.2cm,1cm) -- (15.5cm,1cm) node at (-0.5cm,1cm) {1};
    
Die anderen Hilfslinien kann man jetzt entweder auf die gleiche Art und Weise hinzufügen, oder aber die foreach Schleife verwenden. Das machen wir jetzt. Mehr zur foreach Schleife erfahrt ihr hier. Es sollen insgesamt vier Hilfslinien gezeichnet werden. Damit sieht die Schleife und das Ergebnis wie folgt aus:
  \foreach \x in {1,...,4}
    \draw[gray!50, text=black] (-0.2 cm,\x cm) -- (15.5 cm,\x cm) 
      node at (-0.5 cm,\x cm) {\x};
    

back to top

Eine Säule


Die Säulen werden als Rechtecke gezeichnet, deren Höhe der jeweiligen Wachstumsrate entspricht. Rumäniens Wachstumsrate beträgt 4.1 %, also ist die zughörige Säule 4.1 cm hoch. Gezeichnet wird wieder mit dem draw Befehl, wobei für das Rechteck die zusätzliche Angabe von rectangle nötig ist. Die 1 cm breite und 4.1 cm hohe Säule für Rumänien erhalten wir somit über
  \draw (0.5cm,0cm) rectangle (1.5cm,4.1cm);
    
Zwei entscheidende Sachen fehlen aber noch: die Beschriftung der Säule und eine ordentliche Farbe. Zuerst zur Beschriftung. Zum Einen müssen wir die genaue Wachstumsrate für Rumänien angeben (das gehört einfach zum guten Stil) und zum Anderen muss erkennbar sein, dass es sich um Rumäniens Wachstumsrate handelt. Bei den vorliegenden Daten bietet es sich an, die genaue Prozentangebe direkt über die Säule zu schreiben. Die Mitte der Säulenbreite treffen wir bei 1 cm und ein geeigneter Abstand zum oberen Ende erhalten wir mit 0.3 cm, also fügen wir an das Rechteck einfach ein node an:
  \draw (0.5cm,0cm) rectangle (1.5cm,4.1cm) node at (1cm,4.4cm) {4.1};
    
Da die Namen der Staaten zum Teil recht lang sind, bietet es sich an, sie schräg an die unteren Enden der Säulen zu heften. Dazu machen wir vom \node Befehl gebrauch. Einen geeigneten Punkt für das untere Ende der Säule stellt (1cm,-0.1cm) dar. Um den Text um 45° zu drehen, benutzen wir die Option rotate.
  \definecolor{myblue}{HTML}{92dcec}

  \draw[fill=myblue] (0.5cm,0cm) rectangle (1.5cm,4.1cm)
      node at (1cm,4.4cm) {4.1};   
  \node[rotate=45, left] at (1cm, -0.1cm) {Rumänien};
    

back to top

Wie man sieht wurde das Problem mit der Farbe auch gleich beseitigt. Es wurde eine eigene Farbe myblue mit dem Befehl \definecolor definiert. Näheres zur Definition von Farben entnehmt bitte dem xcolor manual. Damit wäre die erste Säule geschafft.

Alle Säulen


Die restlichen neun Säulen können wir jetzt entweder per copy and paste entstehen lassen, oder wieder eine foreach Schleife benutzen. Wir entscheiden uns für letzteres.

Jede Säule hat drei individuelle Attribute die wir in der Schleife berücksichtigen müssen: den Anfangspunkt auf der Abzisse, die Höhe in Form der Wachstumsrate und die Beschriftung. Die Anfangspunkte lassen sich leicht berechnen. Jede Säule soll 1 cm breit sein und einen Abstand von 0.5 cm zur benachbarten Säule haben. Damit erhalten wir 0.5 cm, 2 cm, 3.5 cm , ... , 12.5 cm, 14 cm als Anfangspunkte auf der Abzisse. Die Höhen und die Beschriftungen der Säulen sind klar, sie befinden sich in obiger Tabelle. Damit erhalten wir folgende Schleife:

  \foreach \x/\y/\country in {0.5/4.1/Rumänien,
                              2/3.7/Griechenland, 
                              3.5/3.5/Spanien,
                              5/3.5/Polen,
                              6.5/1.9/Großbritannien,
                              8/1.5/Niederlande,
                              9.5/1.2/Frankreich,
                              11/0.9/Deutschland,
                              12.5/0.5/Portugal,
                              14/0.1/Italien}
    {
     \draw[fill=myblue] (\x cm,0cm) rectangle (1cm+\x cm,\y cm)
       node at (0.5cm + \x cm,\y cm + 0.3cm) {\y};
     \node[rotate=45, left] at (0.6 cm +\x cm,-0.1cm) {\country};
    };
    
Das x durchläuft die Anfangspunkte auf der Abzisse. Für die Höhen der Säulen und für die Angabe der Wachstumsrate ist y zuständig. Die Säulenbeschriftung wird von country erledigt. Auf diese Weise entstehen zehn Säulen in unserem Diagramm. Damit sind wir fertig.

Zusammenfassung

Bevor nun der gesammte Quellcode gezeigt wird, sei noch einmal betont, dass es sich hierbei nicht um die Anleitung zur Konstruktion eines Säulendiagramms handelt, sondern lediglich die Fähigkeiten des pgf packages aufgezeigt werden sollen. Das entstandene Diagramm lässt sich in vielerlei Hinsicht anpassen und evtl. sogar vereinfachen oder verbessern. Ein schönes Ergebnis ist es aber allemal.

\definecolor{myblue}{HTML}{92dcec}

\begin{tikzpicture}
 
  \draw (0cm,0cm) -- (15.5cm,0cm);  %Abzisse
  \draw (0cm,0cm) -- (0cm,-0.1cm);  %linkes Ende der Abzisse
  \draw (15.5cm,0cm) -- (15.5cm,-0.1cm);  %rechtes Ende der Abzisse
  
  \draw (-0.1cm,0cm) -- (-0.1cm,4.5cm);  %Ordinate
  \draw (-0.1cm,0cm) -- (-0.2cm,0cm);  %unteres Ende der Ordinate
  \draw (-0.1cm,4.5cm) -- (-0.2cm,4.5cm) node [left] {\%};  %oberes Ende der Ordinate

  \foreach \x in {1,...,4}  %Hilfslinien
    \draw[gray!50, text=black] (-0.2 cm,\x cm) -- (15.5 cm,\x cm) 
      node at (-0.5 cm,\x cm) {\x};  %Beschriftung der Hilfslinien

    \node at (7.5cm,5cm) {Wachstumsrate des realen BIP für die zehn
                           Bevölkerungsreichsten Staaten der EU 2005};  %Überschrift

  \foreach \x/\y/\country in {0.5/4.1/Rumänien,  %\x ist Anfang der Säulen
                              2/3.7/Griechenland,  %\y ist Höhe der Säulen
                              3.5/3.5/Spanien,
                              5/3.5/Polen,
                              6.5/1.9/Großbritannien,
                              8/1.5/Niederlande,
                              9.5/1.2/Frankreich,
                              11/0.9/Deutschland,
                              12.5/0.5/Portugal,
                              14/0.1/Italien}
    {
     \draw[fill=myblue] (\x cm,0cm) rectangle (1cm+\x cm,\y cm) %die Säulen
       node at (0.5cm + \x cm,\y cm + 0.3cm) {\y}; %die Prozente über den Säulen
     \node[rotate=45, left] at (0.6 cm +\x cm,-0.1cm) {\country}; %Säulenbeschriftung
    };

\end{tikzpicture}
    

back to top


Kontakt: Angewandte Statistik für Wissenschaft und Wirtschaft