Tikz stacked ybar

Tabellen und Grafiken erstellen und anordnen


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

Beitrag von esdd »

Kannst du bitte ein aktuelles Beispiel machen und dann sagen, welches Problem du mit der Legende hast?

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

Beitrag von esdd »

In dem bisherigen Code kann man die Legende zum Beispiel so einfügen:
\documentclass[margin=5mm]{standalone} 
\usepackage[utf8]{inputenc} 
\usepackage{pgfplots} 
\pgfplotsset{compat=1.9} 
\usepackage{pgfplotstable} 

\usetikzlibrary{fit}

\begin{document} 

\pgfplotsset{ 
     every tick/.style={very thin,gray}, 
     every tick label/.style={font={\scriptsize}}, 
     every axis label/.style={font={\small}}, 
     every axis/.append style={legend style={font=\tiny,draw=none}} 
     } 
\pgfplotstableread{ 
 X     min      max      mean      label 
 1     0.4      1.2      1.0      RCP2.6 
 3    0.9      1.1      1.4      RCP4.5 
 5   0.8      1.0      1.3      RCP6.0 
 7   1.4      1.2      2.0      RCP8.5 

}\mitte 

\pgfplotstableread{ 
 X     min      max      mean      label 
 1    0.3      1.4      1.0      RCP2.6 
 3   1.1      1.5      1.8      RCP4.5 
 5   1.4      1.7      2.2      RCP6.0 
 7   2.6      2.2      3.7      RCP8.5 
}\ende 

\begin{tikzpicture} 
\pgfplotsset{ybar stacked, 
           ymin=0,ymax=5,xmin=0, xmax=8, 
          } 


\begin{axis}[ybar,bar width=15pt, 
     xtick=data, 
     xticklabels from table={\mitte}{label}, 
     xticklabel style={rotate=90,xshift=-0.8ex,anchor=mid east}, 
     xlabel=Emissioinsszenario, 
     ylabel={Temperaturänderung [K]}, 
     ymajorgrids, 
     axis lines*=left, 
     bar shift=-12pt,
     legend style={at={(1.1,1)},anchor=north west, name=label1},
     ] 
   \addplot+ [color=blue!50,opacity=0,forget plot] table [y=min,x=X] \mitte; 
   \addplot+ [color=gray!70,opacity=0.8] table [y=max,x=X] \mitte; 
   \addlegendentry{Mitte}
\end{axis} 

\begin{axis}[ybar,bar width=15pt, 
       axis lines=none, 
       bar shift=12pt,
       legend style={at={(label1.south west)},anchor=north west,name=label2}
      ] 
   \addplot+ [color=blue,opacity=0,forget plot] table [y=min,x=X] \ende; 
   \addplot+ [color=gray!90,opacity=0.9] table [x=X, y=max] \ende; 
   \addlegendentry{Ende}
\end{axis} 

\node[draw, fit= (label1) (label2), inner sep=0pt]{};
\end{tikzpicture}

\end{document}
Infos zu forget plot und legend style findest du in der Doku zu pgfplots.

Gruß
Elke
Zuletzt geändert von esdd am Di 12. Nov 2013, 13:07, insgesamt 1-mal geändert.

mar.kus
Forum-Anfänger
Forum-Anfänger
Beiträge: 18
Registriert: Di 16. Nov 2010, 12:03

Beitrag von mar.kus »

Danke, jedoch zeichnet es in der Legende die Farben doppelt. Vor dem einzelnen Eintrag sind also zweimal das Symbol. Kann man das noch beeinflussen und eins entfernen?

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

Beitrag von esdd »

Wenn du keine ybar legend (also jeweils zwei Balken) haben möchtest, dann lasse in obigem Code bei beiden axis Umgebungen die Option ybar weg.

mar.kus
Forum-Anfänger
Forum-Anfänger
Beiträge: 18
Registriert: Di 16. Nov 2010, 12:03

Beitrag von mar.kus »

Danke für die Hilfe. Leider komme ich kaum zum Bearbeiten des Dokumentes, so dass alles etwas länger dauert.

In dem Beispiel wird der Rahmen der Legende mittels dem \note[]{} an Ende erstellt, jedoch sieht man die Gitterlinien des Diagramms wenn man die Legende nach Innen verschiebt. Diese kann man mittels \note[fill=white,...] ausblenden, jedoch ist dann auch der Text der Legende weg. Wie kann ich diesen eine Ebene nach vorn bringen?

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

Beitrag von esdd »

Du musst einfach nur dafür sorgen, dass beide Legendeneinträge gleich breit sind und damit keinen Abstand zwischen einem der beiden und der umgebenden Node (die den Rahmen zeichnet) hast.

Wenn du dafür einen Vorschlag möchtest, dann gib bitte ein aktuelles Minimalbeispiel an.

Gruß
Elke

Antworten