Der Code im Themenstart enthält schon einige professionelle Mittel bzw. sinnvolle Ansätze, ist aber teilweise schwierig nachzuvollziehen und vielfach unübersichtlich.
· Die Balkenbeschriftung in der Mitte sollte scheints ab Version 1.8 der Default sein (?). Letztes Beispiel hier: https://ipfs-sec.stackexchange.cloudflare-ipfs.com/tex/A/question/36114.html <br>
Mit `\pgfplotsset{compat=newest}` wird das auch so. Allerdings müssen dann diese ganzen manuellen Verschiebungen, die im Code standen wieder rausgenommen wuerden.
· Die Zusatzbeschriftung ("3-jährige" usw.) kann man mit `extra x ticks` ergänzen. Die Trennlinien würde ich dann als draw einzeichnen.
· Was diese Linie "Zufallsniveau" angeht verhindert diese "point meta" Sache hartnäckig, dass man noch andere Arten addplots ergänzt; z.B. einen coordinates-plot, was hier am einfachsten wäre. Das tüftel ich jetzt nicht aus. <br>
Diese Gerade lässt sich auch als draw ergänzen. Soll sie im Vordergrund stehen, schlage ich vor, entsprechende Layer-Ebenen zu definieren und eine scope-Umgebung zu verwenden.
**€dit:** Ok, wie mir gesagt wurde geht diese Ergänzung als coordinates-plot in der (sehr "einfachen"...) Form <br>
`\addplot[purple, tick] [nodes near coords={},sharp plot,stack plots=false,point meta=y] coordinates {(-1,30) (8,30)} node[pos=0, anchor=east, font=\tiny, align=left]{Zufalls-\\niveau};` <br>
rückt aber genauso, wie die einfachere draw-Version davon, nicht in den Vordergrund. <br>
Je nachdem ob diese Linie vor oder hinter den Balken sein soll, wird man ggf. Layer-Ebenen definieren müssen.
PS: Wenn diese ganzen Bezeichnungen in der Datentabelle schon stehen, dann nicht zusätzlich sowas machen "`symbolic x coords={TB,FB,IG,SFB,vTB,vFB,vIG,vSFB},`". Bisschen Mühe geben, rausfinden wie man die Tabellendaten ausliest. Es ist nicht immer ganz trivial, aber intuitiv muss es irgendwie gehen (wenn man das Paket kennt). ;) Siehe Code unten: <br>
`xticklabels from table={\data}{[index]0},
xtick=data,` <br>
in Verbindung mit `x expr=\coordindex`.
PPS: Ich habe mir mal noch einen kleinen Spaß erlaubt und mit Hilfe der Seite <br>
`% Farben definieren
% https://html-color-codes.info/colors-from-image/
\definecolor{myorange}{HTML}{FFD686}
\definecolor{Myorange}{HTML}{F9BC00}
\definecolor{myblue}{HTML}{A8C5E7}
\definecolor{Myblue}{HTML}{5997D0}` <br>
die Farben des Ausgangsbildes ermittelt. :)
[![alt text][1]][1]
\documentclass[a4paper,12pt]{article}
%\usepackage{graphicx}
%\usepackage{tikz}
%\usepackage{tabularx}
\usepackage{pgfplotstable}
\usepackage{pgfplots}
% ================
% Problem "nodes near cords in die Mitte" ist wohl ab v1.9 default;
% siehe https://ipfs-sec.stackexchange.cloudflare-ipfs.com/tex/A/question/36114.html
% \pgfplotsset{compat=1.9} % geht
\pgfplotsset{compat=newest} % geht auch
% siehe aber auch unten "every node near coord/.append style={...}"
% ================
\begin{document}
% ================
% Farben definieren
% https://html-color-codes.info/colors-from-image/
\definecolor{myorange}{HTML}{FFD686}
\definecolor{Myorange}{HTML}{F9BC00}
\definecolor{myblue}{HTML}{A8C5E7}
\definecolor{Myblue}{HTML}{5997D0}
% Diagrammdaten erzeugen
\pgfplotstableread[col sep=comma,header=false]{
TB,11,39
FB,23,26
IG,11,38
SFB,12,38
vTB,6,15
vFB,12,9
vIG,11,8
vSFB,17,1
}\data
\pgfplotstablecreatecol[
create col/expr={\thisrow{1} + \thisrow{2}}
]{sum}{\data}
% Tabelle ansehen:
% \pgfplotstabletypeset[string type]{\data}
\pgfplotsset{
percentage series/.style={
table/y expr=(\thisrow{#1}/\thisrow{sum}*100),
table/meta=#1,
table/x expr=\coordindex,
} }
% ================
% Weitere Einstellungen:
\pgfplotsset{
percentage plot/.style={
point meta=explicit,
every node near coord/.append style={text=black,
% Diese Einstellungen verhindern wesentlich die Position der nodes near cords in der Mitte:
% xshift=17pt,
% yshift=-5.15pt,
% anchor=east,
% font=\footnotesize,
% color=black,
% align=center,
% text width=1cm,
},
nodes near coords={%
% ================
% Alle Zeilenenden hier auskommentieren, sonst diverse Leerstellen...
\pgfmathtruncatemacro\iszero{\originalvalue==0}%
\ifnum\iszero=0%
% \pgfmathprintnumber{\originalvalue}$\,\%$\\
\pgfmathprintnumber[fixed zerofill,precision=0]{\pgfplotspointmeta}%
\fi},
% ================
%nodes near coords align={center}, % hat m.E. hier keinen bes. Effekt
% ================
yticklabel=\pgfmathprintnumber{\tick}\,$\%$,
ymin=-10,
ymax=110,
% enlarge y limits={upper,value=0.1},
visualization depends on={y \as \originalvalue}
},
}
\begin{tikzpicture}
\begin{axis}[
ybar stacked,
% axis on top,
height=8cm, % width=10cm,
percentage plot,
% axis y discontinuity=crunch,
bar width=0.65cm,
% ================
% Immer versuchen nicht doppelt zu arbeiten:
% Nicht
% symbolic x coords={TB,FB,IG,SFB,vTB,vFB,vIG,vSFB},
% sondern
xticklabels from table={\data}{[index]0},
xtick=data,
% was mit x expr=\coordindex (siehe oben) möglich wird.
% ================
x tick label style={rotate=45, anchor=east, xshift=-1.5mm, yshift=-2mm},
% enlargelimits=0.15,
legend style={
at={(0.5,-0.5)},
anchor=south,
legend columns=-2 },
% Weitere Annotationen
xmin=-1, xmax=8,
extra x ticks={2.5,7},
extra x tick labels={3-jährige, 4-jährige},
extra x tick style={
major tick length=0mm,
% Rumgeschiebe von oben rückgängig machen:
tick label style={align=center, anchor=north, xshift=1.5mm, yshift=-14mm, rotate=-45},
},
clip=false,
]
\addplot \addplot[fill=myblue, draw=Myblue] table [percentage series=1] {\data};
\addplot \addplot[fill=myorange, draw=Myorange] table [percentage series=2] {\data};
\legend{\strut leere Box, \strut volle Box}
% "Zufallsniveau"
\draw[red, thick] (-1,50) node[anchor=east, font=\tiny, align=left] {Zufalls-\\niveau} -- (8,50);
%alternativ
\addplot[purple, tick] [nodes near coords={},sharp plot,stack plots=false,point meta=y] coordinates {(-1,30) (8,30)} node[pos=0, anchor=east, font=\tiny, align=left]{kein \\ Zufalls-\\niveau};
% Trennstrich x-Achse
\foreach \x in {-1,4,8}{\edef\temp{\noexpand
\draw[] (\x,-10) -- (\x,-25mm);
}\temp}
\end{axis}
\end{tikzpicture}
\end{document}
[1]: https://texwelt.de/upfiles/56555555_3.pnghttps://texwelt.de/upfiles/56555555_4.png