Hallo zusammen,

ich möchte gerne ein Säulendiagramm für eine Auswertung erstellen. Das klappt soweit auch ganz gut, zumindest solange die Säulen alle die gleiche Farbe haben. Allerdings würde ich gerne die Säulen der Proben, die geeignet sind, in Grün und die anderen Säulen in Rot darstellen. Mein bisheriger Ansatz mit folgendem Code zerschießt leider die Formatierung komplett. :(

\documentclass[]{scrreprt}

\usepackage{pgfplots}                   % Für Säulendiagramm
\pgfplotsset{compat=1.18}               % Versionsangabe

\begin{document}

\begin{tikzpicture}
 \pgfplotsset{
            every linear axis/.append style={
                ybar,
                %bar width=20pt,
                point meta=rawy,
                ymajorgrids=true,
                symbolic x coords={Probe 1,Probe 2,Probe 3,Probe 4,Probe 5},
                x tick label style={rotate=60,anchor=north east},
                enlargelimits=auto,
                ymin = 0,
                ymax = 8,
                legend pos= north east,
                    legend cell align=left, }}
  \begin{axis}[
  bar width = 20pt,
    ylabel=$\Delta \%T$,
    ytick={0,1,...,8},
    xtick=data,
    ]
    \addplot[fill=green,error bars/.cd,y dir=both,y explicit] coordinates {
      (Probe 1,5.5) -= (0,1) += (0,1)
      (Probe 2,5.0) -= (0,1) += (0,0.5)
%      (Probe 3,1.9) -= (0,0) += (0,2)
%      (Probe 4,3.3) -= (0,1) += (0,0)
%      (Probe 5,4.1) -= (0,0) += (0,0)
    };
    \addlegendentry{geeignet}
    \addplot[fill=red,error bars/.cd,y dir=both,y explicit] coordinates {
      (Probe 3,1.9) -= (0,0) += (0,2)
      (Probe 4,3.3) -= (0,1) += (0,0)
      (Probe 5,4.1) -= (0,0) += (0,0)
    };
    \addlegendentry{ungeeignet}
  \end{axis}
\end{tikzpicture}

\end{document}

Mit nur einem \addplot sieht alles gut aus. Hier stimmt jetzt allerdings die Position der grünen Säulen nicht mehr und bei den roten Säulen fehlt die Beschriftung. Auch die Abstände zwischen den Säulen sind unterschiedlich und zum Rand nicht existent.

Habe es auch schon mit zwei axis Umgebungen probiert, aber leider auch ohne Erfolg (MWE kann ich gerne nachliefern, falls gewünscht). In der Dokumentation zu pgfplots habe ich bisher auch nichts gefunden, auch wenn ich mir fast sicher bin, dass es irgendwo enthalten ist.

Daher würde ich mich sehr über Eure Unterstützung freuen!

Das Diagramm möchte ich dann noch erweitern und ggf. die Abstände anpassen. Mit der Option ybar=xpt kann ja aber nur der Abstand zwischen Säulen desselben x-Wertes angepasst werden. Gibt es so eine Möglichkeit auch für die Abstände der Säulen zwischen den x-Werten? Hoffe ich habe diese Option nicht in der Dokumentation überlesen.

Vielen Dank schon einmal und ein schönes Wochenende!

gefragt 03 Feb '23, 11:38

LatexNoob23's gravatar image

LatexNoob23
417
Akzeptiert-Rate: 0%


Wenn Du keine Verschiebung zwischen den zwei Säulenplots haben möchtest, kannst du entweder

ybar=-\pgfplotwidth

verwenden oder nach ybar noch bar shift=0pt einfügen:

ybar,
ybar shift=0pt

Wenn du alle Beschriftungen haben möchtest, dann verwende nicht xtick=data, da das nur die verwendeten Daten des ersten Plots nutzt. Nimm stattdessen

xtick distance=1

Den Abstand zwischen den Säulen kannst du auf verschiedene Arten beeinflussen: Du kannst die Breite der Säulen (z.B. bar width=10pt) oder die Breite des gesamten Diagramms (z.B. width=10cm) oder die Länge für eine Einheit in x-Richtung vorgeben (z.B. x=2cm) ändern.

\documentclass[]{scrreprt}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}

\begin{document}
\begin{tikzpicture}
  \begin{axis}[
    ybar,bar shift=0pt, %oder ybar=-\pgfplotbarwidth,
    bar width = 20pt,
    bar shift=0pt,
    point meta=rawy,
    ymajorgrids=true,
    ylabel=$\Delta \%T$,
    ytick={0,1,...,8},
    ymin = 0,
    ymax = 8,
    symbolic x coords={Probe 1,Probe 2,Probe 3,Probe 4,Probe 5},
    x tick label style={rotate=60,anchor=north east},
    xtick distance=1,% statt xtick=data
    enlargelimits=auto,
    legend pos= north east,
    legend cell align=left,
    %x=2cm
  ]
    \addplot[fill=green,error bars/.cd,y dir=both,y explicit] coordinates {
      (Probe 1,5.5) -= (0,1) += (0,1)
      (Probe 2,5.0) -= (0,1) += (0,0.5)
    };
    \addlegendentry{geeignet}
    \addplot[fill=red,error bars/.cd,y dir=both,y explicit] coordinates {
      (Probe 3,1.9) -= (0,0) += (0,2)
      (Probe 4,3.3) -= (0,1) += (0,0)
      (Probe 5,4.1) -= (0,0) += (0,0)
    };
  \end{axis}
\end{tikzpicture}
\end{document}
Permanenter link

beantwortet 04 Feb '23, 22:06

esdd's gravatar image

esdd
17.7k254256
Akzeptiert-Rate: 62%

Vielen vielen Dank, genau so habe ich mir das vorgestellt. :D Danke auch für die ganzen Hinweise, manchmal steckt der Teufel echt im Detail. Dann wünsche ich Dir noch einen schönen Sonntag.

(05 Feb '23, 11:33) LatexNoob23
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:

×296
×53
×48

gestellte Frage: 03 Feb '23, 11:38

Frage wurde gesehen: 1,240 Mal

zuletzt geändert: 05 Feb '23, 11:33