\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á:
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
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 \addplot
comandos 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 style
comando. 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}
.
\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:
O OP prefere usar porcentagens em vez de números. Em seguida, substitua as linhas correspondentes por
nodes near coords={\pgfmathprintnumber\pgfplotspointmeta\%}
.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.Para remover a grade no topo, adicione
axis on top=false
aotestbar/.style
Com essas alterações feitas, uma nova saída é mostrada abaixo.