Säulendiagramm in Latex Thema ist als GELÖST markiert

Tabellen und Grafiken erstellen und anordnen


MariKa

Säulendiagramm in Latex

Beitrag von MariKa »

Hallo,

ich arbeite noch nicht lange mit Latex und deshalb tue ich mich grad schwer mit der Erstellung eines Säulendiagramms. Hab ein Beispielcode hier auf der Seite gefunden und meine Werte ergänzt. Funktioniert leider nicht. Die Balken werden nicht dargestellt. Eigentlich sollten es 6 sein (X,Y,Z,MX,MY,MZ)...

Kann mir dabei jemand helfen?

Mein Code sieht aus wie folgt:
\documentclass[10pt,a4paper]{article} 

\usepackage[T1]{fontenc} 
\usepackage[ngerman]{babel} 
\usepackage{lmodern} 
\usepackage[utf8]{inputenc} 
\usepackage{pgfplots} 

\pgfplotsset{ 
   compat=1.9, 
   xlabel near ticks, 
   ylabel near ticks 
} 
\begin{document} 
   \begin{tikzpicture} 
     \begin{axis}
     [
       height=6cm, 
       width=12cm, 
       enlargelimits=0.05, 
       legend style={ 
         at={(0.5,-0.2)}, 
         anchor=north, 
         legend columns=-1 
       }, 
       ymin=-30, 
       ymax=40, 
       x tick label style={/pgf/number format/1000 sep=}, 
       x tick label style={rotate=45,anchor=east}, 
       ylabel={Mio. t}, 
       ybar interval=5, 
       ytick={-30,-20,...,40} 
     ] 
 
       \addplot coordinates { %TP1.02
      (X,5.495)
      (Y,0.278)
      (Z,-1.686)
      (MX,-0.259)
      (MY,-6.11)
      (MZ,-0.16)
       }; 
       
       \addplot coordinates { %TP1.03	
       	(X,26.618)
       	(Y,5.252)
       	(Z,9.998)
       	(MX,12.455)
       	(MY,14.831)
       	(MZ,-17.319)
       }; 
       
       \addplot coordinates { %TP1.09
        (X,13.213)
        (Y,	0.007)
        (Z,3.594)
        (MX,-0.011)
        (MY,3.856)
        (MZ,-0.026)
       }; 
       
         \addplot coordinates { %TP1.10
            (X,28.349)
            (Y,	-4.235)
            (Z,7.511)
            (MX,-12.248)
            (MY,15.522)
            (MZ,22.576)
             }; 

       \legend{TP1.02,TP1.03,TP1.09,TP1.10} 
   \end{axis} 
    
   \end{tikzpicture} 
\end{document}

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag von esdd »

Dann musst Du der axis Umgebung noch sagen, dass das Deine Koordinaten sind
symbolic x coords={X,Y,Z,MX,MY,MZ},
xtick={X,Y,Z,MX,MY,MZ},
und ybar statt ybar interval=5 verwenden. Außerdem würde ich links und rechts zusätzlichen Abstand mit enlarge x limits={abs=25pt} einfügen.

Die Balken sind in der Voreinstellung 10pt breit und haben bei einer Koordinate den Abstand 2pt. Die Balkenbreite lässt sich über bar width=... ändern. Möchte man einen anderen Abstand zwischen den Balken, so kann man diesen ybar zuweisen, also zum Beispiel ybar=1pt.

Code:
 
\documentclass[10pt,a4paper]{article} 
\usepackage[T1]{fontenc} 
\usepackage[ngerman]{babel} 
\usepackage{lmodern} 
\usepackage[utf8]{inputenc} 
\usepackage{pgfplots} 

\pgfplotsset{ 
    compat=1.9, 
    xlabel near ticks, 
    ylabel near ticks 
} 
\begin{document} 
\begin{tikzpicture} 
  \begin{axis} 
  [ 
    height=6cm, 
    width=12cm, 
    enlargelimits=0.05, 
    legend style={ 
      at={(0.5,-0.2)}, 
      anchor=north, 
      legend columns=-1 
    }, 
    ymin=-30, 
    ymax=40, 
    x tick label style={/pgf/number format/1000 sep=}, 
    x tick label style={rotate=45,anchor=east}, 
    ylabel={Mio. t}, 
    ybar,% statt ybar interval=5,
    ytick={-30,-20,...,40},
    symbolic x coords={X,Y,Z,MX,MY,MZ},% <- ergänzt
    xtick={X,Y,Z,MX,MY,MZ},% <- ergänzt
    enlarge x limits={abs=25pt}% <- ergänzt
  ] 
    \addplot coordinates { %TP1.02 
   (X,5.495) 
   (Y,0.278) 
   (Z,-1.686) 
   (MX,-0.259) 
   (MY,-6.11) 
   (MZ,-0.16) 
    }; 
    \addplot coordinates { %TP1.03    
       (X,26.618) 
       (Y,5.252) 
       (Z,9.998) 
       (MX,12.455) 
       (MY,14.831) 
       (MZ,-17.319) 
    }; 
    \addplot coordinates { %TP1.09 
     (X,13.213) 
     (Y,   0.007) 
     (Z,3.594) 
     (MX,-0.011) 
     (MY,3.856) 
     (MZ,-0.026) 
    }; 
    \addplot coordinates { %TP1.10 
       (X,28.349) 
       (Y,   -4.235) 
       (Z,7.511) 
       (MX,-12.248) 
       (MY,15.522) 
       (MZ,22.576) 
        }; 
    \legend{TP1.02,TP1.03,TP1.09,TP1.10} 
\end{axis} 
\end{tikzpicture} 
\end{document} 
BTW: Gibt es einen speziellen Grund, weshalb Du Kompatibilität zur älteren Version 1.9 herstellst? Aktuell ist 1.12.

Gruß
Elke

Edit: xtick={X,Y,Z,MX,MY,MZ}, ergänzt
Zuletzt geändert von esdd am Fr 11. Sep 2015, 08:55, insgesamt 1-mal geändert.

MariKa

Beitrag von MariKa »

Hey,

vielen Dank für deine Antwort, das hat mir sehr geholfen. :D

Wie kann ich denn die Beschriftung der Y-Achse waagerecht und zweizeilig einstellen?

Und im Moment sind die Balken alle mit dem gleichen Abstand zueinander dargestellt. Um die einzelnen X-Koordinaten besser voneinander unterscheiden zu können würde ich gerne quasi nach jedem 4. Balken einen größeren Abstand oder eine dünne Linie zur Abgrenzung einfügen.
Wie kann ich das umsetzen?

Vielen Dank schon im Voraus..

LG

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag von esdd »

MariKa hat geschrieben: Wie kann ich denn die Beschriftung der Y-Achse waagerecht und zweizeilig einstellen?
Die x tick label hast Du doch auch gedreht? Für die Beschriftung der y-Achse geht das analog und zusätzlich musst Du noch text width und/oder align angeben.
ylabel style={rotate=-90,align=right},
ylabel={Mio.\\ t},
MariKa hat geschrieben: Und im Moment sind die Balken alle mit dem gleichen Abstand zueinander dargestellt. Um die einzelnen X-Koordinaten besser voneinander unterscheiden zu können würde ich gerne quasi nach jedem 4. Balken einen größeren Abstand oder eine dünne Linie zur Abgrenzung einfügen.
Wie kann ich das umsetzen?
Was meinst Du, warum ich Dir oben erklärt habe, wie man die Balken etwas schmaler machen kann und den Abstand zwischen den Balken für einen Wert beeinflussen kann? Versuch einfach mal
ybar=8pt,
Alternativ oder zusätzlich kannst Du auch width etwas erhöhen, was zu mehr Abstand zwischen den Gruppen führt. Beachte allerdings den Edit meiner ersten Antwort oben.

Gruß
Elke

MariKa

Beitrag von MariKa »

Danke,

jetzt ragt allerdings der Titel der Y-Achse in die Beschriftung der Y-Achse hinein. Wie kann ich die Beschriftung über dem Diagramm platzieren, bzw. den Abstand einstellen?

MariKa

Beitrag von MariKa »

MariKa hat geschrieben:Danke,

jetzt ragt allerdings der Titel der Y-Achse in die Beschriftung der Y-Achse hinein. Wie kann ich die Beschriftung über dem Diagramm platzieren, bzw. den Abstand einstellen?

Hat sich schon geklärt :)

Hast du zufällig eine Idee, wie man eine Datentabelle unterhalb des Diagramms darstellen kann?

Und wie lassen sich einzelne Balken unterbrechen, wenn sie erheblich länger sind als die Restlichen?

Antworten