von feuersaenger » So 13. Okt 2013, 18:37
Hi,
in Deinem Fall lohnt sich der upgrade von pgfplots auf die neueste stable version 1.9 : die hat naemlich native unterstuetzung fuer stacked plots und nodes near coords. Zudem unterstuetzt die das Nicht-darstellen von "0" inkrements von Haus aus.
Deine Anforderung mit den absolutwerten erfordert einen lookup in Deiner absolutwerts tabelle, und zwar mithilfe des \coordindex aus der relativtabelle und dem richtigen Spaltennamen.
Sowas kann man mit \pgfplotstablegetelem{ row }{ col }\of table machen. Dummerweise braucht man 'visualization depends on', um den richtigen \coordindex zu verwenden - leider habe ich wohl beim implementieren des "unterdrueck 0-increments" einen Fehler beim erhoehen des \coordindex gemacht.
Hier waere der code:
\documentclass[a4paper,11pt]{article}
\usepackage[latin1]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{tikz}
\pgfplotsset{compat=1.9}
\begin{document}
\begin{tikzpicture}
\pgfplotstableread{
First Second Third Fourth
174 62 0 12
165 80 0 3
69 159 2 18
19 185 5 39
39 86 4 119
56 98 4 90
}\dataabsolute
\pgfplotstableread{
First Second Third Fourth
70.2 25.0 0.0 4.8
66.5 32.3 0.0 1.2
27.8 64.1 0.8 7.3
7.7 74.6 2.0 15.7
15.7 34.7 1.6 48.0
22.6 39.5 1.6 36.3
}\datarelative
\begin{axis}
[ybar stacked,
bar width=1.5cm, width=15cm,
point meta=rawy,
enlarge x limits=auto,
xtick=data,
xticklabels={
Kategorie 1,
Kategorie 2,
Kategorie 3,
Kategorie 4,
Kategorie 5,
Kategorie 6
},
xticklabel style={font=\footnotesize, text width=2cm, align=center, rotate=45},
visualization depends on=value\coordindex \as\INDEX,
absolute values/.style={
nodes near coords={\pgfplotstablegetelem{\INDEX}{#1}\of\dataabsolute\pgfmathprintnumber\pgfplotsretval},
},
]
\addplot +[
ybar stacked,
absolute values=First,
] table
[y=First, x expr=\coordindex] {\datarelative};
\addplot +[
ybar stacked,
absolute values=Second,
] table [y=Second, x expr=\coordindex] {\datarelative};
\addplot +[
ybar stacked,
absolute values=Third,
] table [y=Third, x expr=\coordindex] {\datarelative};
\addplot +[
ybar stacked,
absolute values=Fourth,
] table [y=Fourth, x expr=\coordindex] {\datarelative};
\end{axis}
\end{tikzpicture}
\end{document}
Ich habe einen style 'absolute values' gemacht, der als erstes Argument den spaltennamen fuer \dataabsolute' braucht.
Den overhead mit 'visualization depends on' und \pgfplotstablegetelem' koenntest Du Dir sparen, wenn Du den absolutwert direkt in die eingabetabelle als extra-spalten mitreinschreibst -aber das ist optional.
Mit liebem Gruss
Christian
Hi,
in Deinem Fall lohnt sich der upgrade von pgfplots auf die neueste stable version 1.9 : die hat naemlich native unterstuetzung fuer stacked plots und nodes near coords. Zudem unterstuetzt die das Nicht-darstellen von "0" inkrements von Haus aus.
Deine Anforderung mit den absolutwerten erfordert einen lookup in Deiner absolutwerts tabelle, und zwar mithilfe des \coordindex aus der relativtabelle und dem richtigen Spaltennamen.
Sowas kann man mit \pgfplotstablegetelem{ row }{ col }\of table machen. Dummerweise braucht man 'visualization depends on', um den richtigen \coordindex zu verwenden - leider habe ich wohl beim implementieren des "unterdrueck 0-increments" einen Fehler beim erhoehen des \coordindex gemacht.
Hier waere der code:
[code]
\documentclass[a4paper,11pt]{article}
\usepackage[latin1]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{tikz}
\pgfplotsset{compat=1.9}
\begin{document}
\begin{tikzpicture}
\pgfplotstableread{
First Second Third Fourth
174 62 0 12
165 80 0 3
69 159 2 18
19 185 5 39
39 86 4 119
56 98 4 90
}\dataabsolute
\pgfplotstableread{
First Second Third Fourth
70.2 25.0 0.0 4.8
66.5 32.3 0.0 1.2
27.8 64.1 0.8 7.3
7.7 74.6 2.0 15.7
15.7 34.7 1.6 48.0
22.6 39.5 1.6 36.3
}\datarelative
\begin{axis}
[ybar stacked,
bar width=1.5cm, width=15cm,
point meta=rawy,
enlarge x limits=auto,
xtick=data,
xticklabels={
Kategorie 1,
Kategorie 2,
Kategorie 3,
Kategorie 4,
Kategorie 5,
Kategorie 6
},
xticklabel style={font=\footnotesize, text width=2cm, align=center, rotate=45},
visualization depends on=value\coordindex \as\INDEX,
absolute values/.style={
nodes near coords={\pgfplotstablegetelem{\INDEX}{#1}\of\dataabsolute\pgfmathprintnumber\pgfplotsretval},
},
]
\addplot +[
ybar stacked,
absolute values=First,
] table
[y=First, x expr=\coordindex] {\datarelative};
\addplot +[
ybar stacked,
absolute values=Second,
] table [y=Second, x expr=\coordindex] {\datarelative};
\addplot +[
ybar stacked,
absolute values=Third,
] table [y=Third, x expr=\coordindex] {\datarelative};
\addplot +[
ybar stacked,
absolute values=Fourth,
] table [y=Fourth, x expr=\coordindex] {\datarelative};
\end{axis}
\end{tikzpicture}
\end{document}
[/code]
Ich habe einen style 'absolute values' gemacht, der als erstes Argument den spaltennamen fuer \dataabsolute' braucht.
Den overhead mit 'visualization depends on' und \pgfplotstablegetelem' koenntest Du Dir sparen, wenn Du den absolutwert direkt in die eingabetabelle als extra-spalten mitreinschreibst -aber das ist optional.
Mit liebem Gruss
Christian