Gegeben sind zwei Serien, welche jeweils zwei Unterserien beinhalten. Die Messwerte addieren sich zu 100.

Wie kann ich die Subserien 1 und die Subserien 2 nebeneinander setzen, und somit die Darstellung des kompletten Diagramms auf zwei Dimensionen begrenzen?

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.9}
\begin{filecontents}{serieA.dat}
#subserie x y
1 10 90
2 20 80
\end{filecontents}
\begin{filecontents}{serieB.dat}
#subserie x y
1 70 30
2 25 75
\end{filecontents}
\colorlet{xcolor}{red}
\colorlet{ycolor}{blue}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[ybar stacked]
        \addplot [fill=xcolor]
        table [x index=0,y index=1] {serieA.dat};
        \addplot [fill=ycolor] table [x index=0,y index=2] {serieA.dat};
%       \addlegendentry{SerieA}
        %
        \addplot [fill=xcolor]
        table [x index=0,y index=1] {serieB.dat};
        \addplot [fill=ycolor] table [x index=0,y index=2] {serieB.dat};
%       \addlegendentry{SerieB}
    \end{axis}
\end{tikzpicture}
\end{document}

gefragt 08 Nov '13, 09:27

Johannes's gravatar image

Johannes
7.3k294566
Akzeptiert-Rate: 43%


Um zu verhindern, dass die Subserie 2 auf die Subserie 1 gesetzt wird, kann man jede in eine eigene axis Umgebungen setzen. Mit der Option bar shift kann man die erste Subserie etwas nach links und die zweite etwas nach rechts verschieben, so dass beide Subserien nebeneinandar dargestellt werden. Damit die beiden axis-Umgebungen die gleichen Einteilungen an den Koordinatenachsen verwenden, gibt man diese einheitlich für beide vor.

\documentclass[margin=5mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.9}
\begin{filecontents}{serieA.dat}
#subserie x y
1 10 90
2 20 80
\end{filecontents}
\begin{filecontents}{serieB.dat}
#subserie x y
1 70 30
2 25 75
\end{filecontents}
\colorlet{xcolor}{red}
\colorlet{ycolor}{blue}
\begin{document}
\begin{tikzpicture}
\pgfplotsset{ybar stacked,ymin=0,ymax=100,xmin=0.5,xmax=2.5,xtick=data} 
\begin{axis}[bar shift=-8pt]
    \addplot [fill=xcolor] table [x index=0,y index=1] {serieA.dat};
    \addplot [fill=ycolor] table [x index=0,y index=2] {serieA.dat};
\end{axis}
\begin{axis}[bar shift=8pt]
        \addplot [fill=xcolor] table [x index=0,y index=1] {serieB.dat};
        \addplot [fill=ycolor] table [x index=0,y index=2] {serieB.dat};
    \end{axis}
\end{tikzpicture}
\end{document}

alt text

Außerdem ist es vielleicht sinnvoll für die beiden Subserien verschiedene Farben zu definieren und Legenden einzufügen. Wenn man für die Legende der ersten Subserie die Option name nutzt, dann kann die Legende der zweiten einfach an dieser ausgerichtet werden.

\documentclass[margin=5mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.9}
\usetikzlibrary{fit}
\begin{filecontents}{serieA.dat}
#subserie x y
1 10 90
2 20 80
\end{filecontents}
\begin{filecontents}{serieB.dat}
#subserie x y
1 70 30
2 25 75
\end{filecontents}
\colorlet{xcolorA}{red}\colorlet{xcolorB}{orange}
\colorlet{ycolorA}{blue}\colorlet{ycolorB}{blue!50!red}
\begin{document}
\begin{tikzpicture}
    \pgfplotsset{ybar stacked,ymin=0,ymax=100,xmin=0.5,xmax=2.5,xtick=data} 
    \begin{axis}[bar shift=-8pt,
        legend pos=outer north east,legend style={name=serieA}]
        \addplot [fill=xcolorA] table [x index=0,y index=1] {serieA.dat};
        \addplot [fill=ycolorA] table [x index=0,y index=2] {serieA.dat};
        \legend{x (Serie A),y (Serie A)}
    \end{axis}
    \begin{axis}[bar shift=8pt,
        legend style={at={([yshift=-1mm]serieA.south west)},anchor=north west}]
        \addplot [fill=xcolorB] table [x index=0,y index=1] {serieB.dat};
        \addplot [fill=ycolorB] table [x index=0,y index=2] {serieB.dat};
        \legend{x (Serie B),y (Serie B)}
    \end{axis}
\end{tikzpicture}
\end{document}

alt text

Permanenter link

beantwortet 08 Nov '13, 10:46

esdd's gravatar image

esdd
17.8k284257
Akzeptiert-Rate: 62%

bearbeitet 12 Nov '13, 17:27

Danke Elke, wie immer super Lösung.

(08 Nov '13, 11:18) Johannes

Danke für das Update, das ist sehr hilfreich.

(12 Nov '13, 18:02) Johannes
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:

×298

gestellte Frage: 08 Nov '13, 09:27

Frage wurde gesehen: 9,409 Mal

zuletzt geändert: 12 Nov '13, 18:02