Tikz stacked ybar

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Tikz stacked ybar

von esdd » Di 19. Nov 2013, 13:48

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

von mar.kus » Di 19. Nov 2013, 10:51

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?

von esdd » Di 12. Nov 2013, 13:15

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.

von mar.kus » Mo 11. Nov 2013, 20:37

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?

von esdd » Di 5. Nov 2013, 17:28

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

von esdd » Mo 4. Nov 2013, 22:13

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

von mar.kus » Mo 4. Nov 2013, 17:19

Das Diagramm steht so weit, jedoch fehlt noch die Legende. Wie kann ich die manuell hinzufügen?

von esdd » Do 17. Okt 2013, 11:39

In der Fehlermeldung steht, dass er mit \figureheight und \figurewidth nichts anfangen kann. Entweder du gibst sinnvolle Werte für height und width vor oder du lässt beide Optionen weg.

Die Angabe von ymin und ymax würde ich nicht bei den einzelnen axis-Umgebungen machen, sondern in dem pgfplotsset für das tikzpicture, damit die Werte ganz sicher für alle axis Umgebungen einheitlich sind.
\begin{tikzpicture} 
\pgfplotsset{ybar stacked, 
           ymin=0,ymax=5,xmin=0, xmax=8, 
           %height=0.5\linewidth, 
           %width=\linewidth
          } 
...
Die Erklärung zu \addplot+ findet sich in der Doku zu pgfplots:
\addplot+[<options>] ...;
Does the same like \addplot[<Options>] ...; except that <options> are appended to the arguments
which would have been taken for \addplot ... (the element of the default list).
Um bei jedem Durchlauf die Zeichnungen zu neu zu externalisieren, kannst du bei \tikzexternalize die Option 'force remake' ergänzen. Näheres findest du im pgfmanual im Kapitel zur „Externalization Library“.

von mar.kus » Do 17. Okt 2013, 11:21

Ich habe das Diagramm erneuert. Der erste Balken wird ausgeblendet und nur der obere Balken bleibt stehen. Der Compiler gibt mir noch einen Fehler aus, vielleicht findest du ihn.

Eine weitere Frage zum Verständnis. Warum ist das + nach \addplot ?
\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,xmin=0, xmax=8, 
	    	height=\figureheight,
	    	width=\figurewidth} 


\begin{axis}[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, 
    ymin=0, ymax=5, 
    axis lines*=left, 
    bar shift=-12pt
    ] 
  \addplot+ [color=blue!50,opacity=0] table [y=min,x=X] \mitte; 
  \addplot+ [color=gray!70,opacity=0.8] table [y=max,x=X] \mitte; 
\end{axis} 

\begin{axis}[bar width=15pt, 
	ymin=0, ymax=5, 
    	axis lines=none, 
   	bar shift=12pt
     ] 
  \addplot+ [color=blue,opacity=0] table [y=min,x=X] \ende; 
  \addplot+ [color=gray!90,opacity=0.9] table [x=X, y=max] \ende; 
\end{axis} 
\end{tikzpicture}

von esdd » Do 17. Okt 2013, 11:08

Hast du meine Frage gesehen: Soll die Gesamthöhe der Balken tatsächlich jeweils der Summe von min und max entsprechen?

Nach oben