Säulendiagramm Tikz

Tabellen und Grafiken erstellen und anordnen


Leilamartin
Forum-Newbie
Forum-Newbie
Beiträge: 7
Registriert: Fr 24. Nov 2017, 10:05

Säulendiagramm Tikz

Beitrag von Leilamartin »

Hallo liebes Forum,

ich benötige einige Säulendiagramme und habe mich im Forum etwas Schlau gemacht und kann mit Tiks nun so was malen:
\documentclass{scrbook}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc} 
\usepackage[ngerman]{babel}
\usepackage{pgfplots}
\pgfplotsset{
  compat=1.13,
}

\begin{document}
\begin{tikzpicture}
  \begin{axis}[
    ybar,
    bar width=20pt,
    nodes near coords,
    symbolic x coords ={Unterschicht,Arbeiterschicht,Mittelschicht,obere Mittelschicht, Oberschicht,Einstufung abgelehnt},
    x tick label style={rotate=45,anchor=north east},
    ]
    \addplot[fill=black] coordinates {
      (Unterschicht,1)
      (Arbeiterschicht,1)
      (Mittelschicht,3)
      (obere Mittelschicht,0)
      (Oberschicht,1)
      (Einstufung abgelehnt,1)
    };
  \end{axis} 
\end{tikzpicture}
\end{document}
Ich bin schon fast zufrieden und würde mich freuen, wenn ihr mir bei folgenden Fragen helfen könnten:

a) Wie bekomme ich die Box, die um das ganze Diagramm geht weg? Und auch die y-Achse soll weg.
b) Wie bekomme ich eine x-Achse hin? (Eine x-Achse ohne Pfeil nach rechts)
c) Was ist die sinnvollste Art, den Säulen unterschiedliche Farben zu geben? (Die Säule rechts soll ohne Füllung bzw. weiß sein)
d) Wie mache ich sinnvoll eine Überschrift über das Diagramm?
e) Ist das "guter" Tikz-Stil oder gibt es eine elegantere Möglichkeit, Säulendiagramme zu erstellen?

Besten Dank für eure Hilfe und liebe Grüße

Laila

markusv
Forum-Meister
Forum-Meister
Beiträge: 947
Registriert: Do 3. Sep 2015, 17:20
Wohnort: Leipzig

Beitrag von markusv »

Hallo nochmal :)
\documentclass{scrbook}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc} 
\usepackage[ngerman]{babel}
\usepackage{pgfplots}
\pgfplotsset{
  compat=1.13,
}

\begin{document}
\begin{tikzpicture}
  \begin{axis}[
    ybar,
    hide y axis,%keine y-Achse
    axis x line = bottom,%x-Achse nur unten
    enlarge x limits = .1,%x-Achse erweitern
    x axis line style = {-},%kein Pfeil
    bar width=20pt,
    nodes near coords,
    title = {Sinnvolle Überschrift},%Diagramm-Titel
    symbolic x coords ={Unterschicht,Arbeiterschicht,Mittelschicht,obere Mittelschicht, Oberschicht,Einstufung abgelehnt},
    x tick label style={rotate=45,anchor=north east},
    ]
    \addplot[fill=black,forget plot] coordinates {%forget plot ergänzt für korrekten Abstand zum "2." plot
      (Unterschicht,1)
      (Arbeiterschicht,1)
      (Mittelschicht,3)
      (obere Mittelschicht,0)
      (Oberschicht,1)
    };
    \addplot[fill=white] coordinates {
      (Einstufung abgelehnt,1)
    };
  \end{axis} 
\end{tikzpicture}
\end{document}
Wäre Microsoft Word für das Schreiben von Büchern entwickelt worden,
würde es Microsoft Book heißen.

Unkomplizierte und schnelle LaTeX-Hilfe, bspw. Erstellung von Vorlagen und Bewerbungen:
Help-LaTeX@web.de

Leilamartin
Forum-Newbie
Forum-Newbie
Beiträge: 7
Registriert: Fr 24. Nov 2017, 10:05

Beitrag von Leilamartin »

Boah! Danke für die schnelle Antwort. Das ist ja ein Traum.

Noch eine kurze Nachfrage: Wie kann ich die x-Achse nach oben schieben, sodass die Säulen direkt aus der x-Achse rauswachsen?

Und nochmals vielen lieben Dank. Dass mir wildfremde Menschen "einfach so" und dann auch noch so ausführlich und kompetent helfen, beeindruckt mich wirklich. Danke!

markusv
Forum-Meister
Forum-Meister
Beiträge: 947
Registriert: Do 3. Sep 2015, 17:20
Wohnort: Leipzig

Beitrag von markusv »

Leilamartin hat geschrieben:Dass mir wildfremde Menschen "einfach so" und dann auch noch so ausführlich und kompetent helfen, beeindruckt mich wirklich. Danke!
Das ist ja der Sinn der Sache. Und als Helfer lernt man ja auch immer noch was nebenbei. Keiner Rede wert also! :)

Du kannst den Abstand per enlarge y limits={.1,upper}, einstellen. Das upper sorgt dafür, dass der Abstand nur oben wirkt, unten erhältst du damit den gewünschten Effekt. Ohne den Abstand oben enlarge y limits={}, oder {0} rutscht die Überschrift unschön in das Diagramm bzw. die Beschriftung.

Im gesamten:
\documentclass{scrbook}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc} 
\usepackage[ngerman]{babel}
\usepackage{pgfplots}
\pgfplotsset{
  compat=1.13,
}

\begin{document}
\begin{tikzpicture}
  \begin{axis}[
    ybar,
    hide y axis,%keine y-Achse
    axis x line* = bottom,%x-Achse nur unten
    enlarge x limits = .1,%x-Achse erweitern
    x axis line style = {-},%kein Pfeil
    enlarge y limits={.1,upper},%Anpassung des Abstandes x-Achse - Diagramm
    bar width=20pt,
    nodes near coords,
    title = {Sinnvolle Überschrift},%Diagramm-Titel
    symbolic x coords ={Unterschicht,Arbeiterschicht,Mittelschicht,obere Mittelschicht, Oberschicht,Einstufung abgelehnt},
    x tick label style={rotate=45,anchor=north east},
    ]
    \addplot[fill=black,forget plot] coordinates {%forget plot ergänzt für korrekten Abstand zum "2." plot
      (Unterschicht,1)
      (Arbeiterschicht,1)
      (Mittelschicht,3)
      (obere Mittelschicht,0)
      (Oberschicht,1)
    };
    \addplot[fill=white] coordinates {
      (Einstufung abgelehnt,1)
    };
  \end{axis} 
\end{tikzpicture}
\end{document}
Wäre Microsoft Word für das Schreiben von Büchern entwickelt worden,
würde es Microsoft Book heißen.

Unkomplizierte und schnelle LaTeX-Hilfe, bspw. Erstellung von Vorlagen und Bewerbungen:
Help-LaTeX@web.de

Leilamartin
Forum-Newbie
Forum-Newbie
Beiträge: 7
Registriert: Fr 24. Nov 2017, 10:05

Beitrag von Leilamartin »

Danke! Das freut mich sehr. LG und schönen Tag

Leilamartin
Forum-Newbie
Forum-Newbie
Beiträge: 7
Registriert: Fr 24. Nov 2017, 10:05

Beitrag von Leilamartin »

Sorry, jetzt habe ich doch noch zwei Rückfragen.

1.) Es geschehen seltsame Dinge, wenn ich die Anzahl der Säulen verändere.

Schmeiße ich eine Säule (bspw. die Unterschicht) raus, ist alles fein:
\documentclass{scrbook} 

\usepackage[utf8]{inputenc} 
\usepackage[T1]{fontenc} 
\usepackage[ngerman]{babel} 
\usepackage{pgfplots} 
\pgfplotsset{ 
  compat=1.13, 
} 

\begin{document} 
\begin{tikzpicture} 
  \begin{axis}[ 
    ybar, 
    hide y axis,%keine y-Achse 
    axis x line* = bottom,%x-Achse nur unten 
    enlarge x limits = .1,%x-Achse erweitern 
    x axis line style = {-},%kein Pfeil 
    enlarge y limits={.1,upper},%Anpassung des Abstandes x-Achse - Diagramm 
    bar width=20pt, 
    nodes near coords, 
    title = {Sinnvolle Überschrift},%Diagramm-Titel 
    symbolic x coords ={
    %Unterschicht,
    Arbeiterschicht,
    Mittelschicht,
    obere Mittelschicht,
    Oberschicht,
    Einstufung abgelehnt
    }, 
    x tick label style={rotate=45,anchor=north east}, 
    ] 
    \addplot[fill=black,forget plot] coordinates {%forget plot ergänzt für korrekten Abstand zum "2." plot 
    %  (Unterschicht,1) 
      (Arbeiterschicht,1) 
      (Mittelschicht,3) 
      (obere Mittelschicht,0) 
     (Oberschicht,1) 
    }; 
    \addplot[fill=white] coordinates { 
      (Einstufung abgelehnt,1) 
    }; 
  \end{axis} 
\end{tikzpicture} 
\end{document} 
Schmeißt ich zwei Säulen raus, dann passieren komische Dinge. Die x-Achse bekommt Dopplungen bei den Labels:
\documentclass{scrbook} 

\usepackage[utf8]{inputenc} 
\usepackage[T1]{fontenc} 
\usepackage[ngerman]{babel} 
\usepackage{pgfplots} 
\pgfplotsset{ 
  compat=1.13, 
} 

\begin{document} 
\begin{tikzpicture} 
  \begin{axis}[ 
    ybar, 
    hide y axis,%keine y-Achse 
    axis x line* = bottom,%x-Achse nur unten 
    enlarge x limits = .1,%x-Achse erweitern 
    x axis line style = {-},%kein Pfeil 
    enlarge y limits={.1,upper},%Anpassung des Abstandes x-Achse - Diagramm 
    bar width=20pt, 
    nodes near coords, 
    title = {Sinnvolle Überschrift},%Diagramm-Titel 
    symbolic x coords ={
    %Unterschicht,
    %Arbeiterschicht,
    Mittelschicht,
    obere Mittelschicht,
    Oberschicht,
    Einstufung abgelehnt
    }, 
    x tick label style={rotate=45,anchor=north east}, 
    ] 
    \addplot[fill=black,forget plot] coordinates {%forget plot ergänzt für korrekten Abstand zum "2." plot 
    %  (Unterschicht,1) 
    %  (Arbeiterschicht,1) 
      (Mittelschicht,3) 
      (obere Mittelschicht,0) 
     (Oberschicht,1) 
    }; 
    \addplot[fill=white] coordinates { 
      (Einstufung abgelehnt,1) 
    }; 
  \end{axis} 
\end{tikzpicture} 
\end{document} 

2.) Wie kann ich bewirken, dass die Säulen stets so hoch sind, wie ihr numerischer Wert ist? Also so sollte es nicht aussehen (das passiert, da es keine 0 mehr gab):
\documentclass{scrbook} 

\usepackage[utf8]{inputenc} 
\usepackage[T1]{fontenc} 
\usepackage[ngerman]{babel} 
\usepackage{pgfplots} 
\pgfplotsset{ 
  compat=1.13, 
} 

\begin{document} 
\begin{tikzpicture} 
  \begin{axis}[ 
    ybar, 
    hide y axis,%keine y-Achse 
    axis x line* = bottom,%x-Achse nur unten 
    enlarge x limits = .1,%x-Achse erweitern 
    x axis line style = {-},%kein Pfeil 
    enlarge y limits={.1,upper},%Anpassung des Abstandes x-Achse - Diagramm 
    bar width=20pt, 
    nodes near coords, 
    title = {Sinnvolle Überschrift},%Diagramm-Titel 
    symbolic x coords ={
    Unterschicht,
    Arbeiterschicht,
    Mittelschicht,
    obere Mittelschicht,
    Oberschicht,
    Einstufung abgelehnt
    }, 
    x tick label style={rotate=45,anchor=north east}, 
    ] 
    \addplot[fill=black,forget plot] coordinates {%forget plot ergänzt für korrekten Abstand zum "2." plot 
      (Unterschicht,1) 
      (Arbeiterschicht,1) 
      (Mittelschicht,3) 
      (obere Mittelschicht,4) %%<- hier war "früher" eine 0 
     (Oberschicht,1) 
    }; 
    \addplot[fill=white] coordinates { 
      (Einstufung abgelehnt,1) 
    }; 
  \end{axis} 
\end{tikzpicture} 
\end{document} 

Und nochmals Danke! ;-)

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

Beitrag von esdd »

Du kannst beispeilsweise xtick=data ergänzen. Das zweite Problem kannst Du durch Angabe von ymin=0 beheben. Beide Angaben gehören in die axis Optionen.

Leilamartin
Forum-Newbie
Forum-Newbie
Beiträge: 7
Registriert: Fr 24. Nov 2017, 10:05

Beitrag von Leilamartin »

Danke! Funktioniert einwandfrei. ;-)

Antworten