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, 03:27

Johannes's gravatar image

Johannes
7.2k132759
Akzeptiert: 68%


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, 04:46

esdd's gravatar image

esdd
14.2k53251

bearbeitet 12 Nov '13, 11:27

Danke Elke, wie immer super Lösung.

(08 Nov '13, 05:18) Johannes

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

(12 Nov '13, 12:02) Johannes
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

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üge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×160

Frage gestellt: 08 Nov '13, 03:27

Frage wurde angeschaut: 2,359 Mal

Zuletzt aktualisiert: 12 Nov '13, 12:02