Barra empilhada única, valores e legenda

Barra empilhada única, valores e legenda
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\pgfplotsset{testbar/.style={
title=strookdiagram sporten,
xbar stacked,
width=10cm,
axis y line*= none, axis x line*= bottom,
xmajorgrids = true,
xmin=0,xmax=100,
ytick = data,
yticklabels = {},
tick align = outside, xtick pos = left,
bar width=6mm, y=8mm,
enlarge y limits={abs=0.625},% 0.5 + 0.5*(y - bar width)/y [TeX.sx #47995]
nodes near coords,
nodes near coords align={left},
}}
\begin{tikzpicture}
\begin{axis}[testbar] 
    \addplot[fill=red!40] coordinates{(20,0) };
    \addplot[fill=gray!40] coordinates{(10,0)};
    \addplot[fill=green!40] coordinates{(20,0) };
    \addplot[fill=orange!40] coordinates{(40,0) };
    \addplot[fill=blue!40] coordinates{(3,0) };
    \addplot[fill=red!40] coordinates{(7,0) };
\end{axis}
\end{tikzpicture}
\end{document}

Queria fazer um gráfico de barras empilhadas, horizontais, com legenda e a porcentagem de cada peça. O código acima me dá:

teste de barra empilhada1

Mas como você pode ver, as porcentagens são todas zero. Eu também quero uma lenda. Desde já, obrigado.

EDITAR

Alterei o código com a ajuda do Jesse, então agora meu código é:

 \documentclass{article}
 \usepackage{pgfplots}
 \usetikzlibrary{positioning}
 \begin{document}
 \pgfplotsset{testbar/.style={
 title=strookdiagram sporten,
 title style={yshift=10pt},
 xbar stacked, area style,
width=10cm,
axis y line*= none, axis x line*= bottom,
xmajorgrids = true,
xmin=0,
xmax=100,
x=1mm,
xtick={0,10,...,100},
ytick = data,
yticklabels = {},
tick align = outside, xtick pos = left,
bar width=6mm, y=8mm,
enlarge y limits={abs=0.625},% 0.5 + 0.5*(y - bar width)/y [TeX.sx #47995]
%nodes near coords,
nodes near coords={\pgfmathprintnumber\pgfplotspointmeta\%}
every node near coord/.append style={rotate=-90,font=\small, left,shift={(axis direction cs:-3,0)}}
}}
\begin{tikzpicture}
\begin{axis}[testbar,legend style={area legend, at={(0.5,-0.85)}, anchor=north, legend columns=-1}] 
\addplot[fill=red!40] coordinates{(20,0) };
\addplot[fill=gray!40] coordinates{(10,0)};
\addplot[fill=green!40] coordinates{(20,0) };
\addplot[fill=orange!40] coordinates{(40,0)};
\addplot[fill=blue!40] coordinates{(3,0) };
\addplot[fill=red!40] coordinates{(7,0) };
\legend{Voetbal,Netbal,C,D,E,F}
\end{axis}
\end{tikzpicture}
\end{document}

Mas a imagem que isso me dá é agora

versão 2

Atualizei todos os pacotes com o TeX Live Utilty e meu editor TeX é o TeXpad.

Responder1

Esta tentativa tenta fornecer duas soluções. Como empilhar significa adicionar coordenadas x ou y de \addplotcomandos sucessivos uns sobre os outros (aqui, é a direção x), causando a sobreposição para 90% e 3% em particular.

A primeira solução na parte superior é girar a etiqueta em -90 graus e usar o tamanho de fonte pequeno. Para fazer isso é definir um estilo de acréscimo via every node near coord/.append stylecomando. Observa-se que o comando shift shift={(axis direction cs:-3,0)}serve para mover os rótulos para cima para que não colidam com as caixas para melhor legibilidade.

O segundo gráfico na parte inferior simplesmente altera as coordenadas y do mesmo y=0 para y=0,1,2,3,4,5, tornando-as como uma escada, sem alterar as orientações padrão do rótulo. Além disso, neste gráfico, você observará por que os rótulos se sobrepõem se forem recolhidos em uma única barra empilhada horizontalmente.

Quanto à legenda, um estilo de legenda é definido via legend style={area legend, at={(0.5,-0.15)}, anchor=north, legend columns=-1}.

insira a descrição da imagem aqui

\documentclass{article}
\usepackage{pgfplots}
\usetikzlibrary{positioning}
\begin{document}
\pgfplotsset{testbar/.style={
title=strookdiagram sporten,
xbar stacked, area style,
width=10cm,
axis y line*= none, axis x line*= bottom,
xmajorgrids = true,
xmin=0,xmax=100,
ytick = data,
yticklabels = {},
tick align = outside, xtick pos = left,
bar width=6mm, y=8mm,
enlarge y limits={abs=0.625},% 0.5 + 0.5*(y - bar width)/y [TeX.sx #47995]
nodes near coords,
every node near coord/.append style={rotate=-90,font=\small, left,shift={(axis direction cs:-3,0)}}
}}
\begin{tikzpicture}
\begin{axis}[testbar,legend style={area legend, at={(0.5,-0.85)}, anchor=north, legend columns=-1}] 
    \addplot[fill=red!40] coordinates{(20,0) };
    \addplot[fill=gray!40] coordinates{(10,0)};
    \addplot[fill=green!40] coordinates{(20,0) };
    \addplot[fill=orange!40] coordinates{(40,0)};
    \addplot[fill=blue!40] coordinates{(3,0) };
    \addplot[fill=red!40] coordinates{(7,0) };
   \legend{A,B,C,D,E,F}
\end{axis}
\end{tikzpicture}

\vspace{1cm}

\pgfplotsset{testbar/.style={
title=strookdiagram sporten,
xbar stacked, area style,
width=10cm,
axis y line*= none, axis x line*= bottom,
xmajorgrids = true,
xmin=0,xmax=100,
ytick = data,
yticklabels = {},
tick align = outside, xtick pos = left,
bar width=6mm, y=8mm,
enlarge y limits={abs=0.625},% 0.5 + 0.5*(y - bar width)/y [TeX.sx #47995]
nodes near coords,
nodes near coords align={left}
}}
\begin{tikzpicture}
\begin{axis}[testbar,legend style={area legend, at={(0.5,-0.15)}, anchor=north, legend columns=-1}] 
    \addplot[fill=red!40] coordinates{(20,0)};
    \addplot[fill=gray!40] coordinates{(10,1)};
    \addplot[fill=green!40] coordinates{(20,2) };
    \addplot[fill=orange!40] coordinates{(40,3) };
    \addplot[fill=blue!40] coordinates{(3,4) };
    \addplot[fill=red!40] coordinates{(7,5) };
   \legend{A,B,C,D,E,F}
\end{axis}
\end{tikzpicture}
\end{document}

Editar:

  1. O OP prefere usar porcentagens em vez de números. Em seguida, substitua as linhas correspondentes por nodes near coords={\pgfmathprintnumber\pgfplotspointmeta\%}.

  2. Para mover o título ainda mais para cima, adicione title style={yshift=10pt}ao eixo do primeiro gráfico porque a% adicionada colidirá com o título na configuração antiga.

  3. Para remover a grade no topo, adicione axis on top=falseaotestbar/.style

Com essas alterações feitas, uma nova saída é mostrada abaixo.

insira a descrição da imagem aqui

informação relacionada