Barra apilada única, valores y leyenda.

Barra apilada única, valores y leyenda.
\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}

Quería hacer un gráfico de barras apiladas, horizontales, con una leyenda y el porcentaje de cada pieza. El código de arriba me da:

prueba de barras apiladas1

Pero como puedes ver, los porcentajes son todos cero. Yo también quiero una leyenda. Gracias de antemano.

EDITAR

Cambié el código con la ayuda de Jesse, así que ahora mi código es:

 \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}

Pero la imagen que me da es ahora.

versión 2

Actualicé todos los paquetes con TeX Live Utilty y mi editor TeX es TeXpad.

Respuesta1

Este intento intenta aportar dos soluciones. Dado que apilar significa agregar las coordenadas x o y de \addplotcomandos sucesivos uno encima del otro (aquí, es la dirección x), provocando la superposición para el 90% y el 3% en particular.

La primera solución en la parte superior es rotar la etiqueta -90 grados y usar el tamaño de fuente pequeño. Hacer eso es definir un estilo de adición mediante every node near coord/.append styleun comando. Cabe señalar que el comando Mayús shift={(axis direction cs:-3,0)}es mover las etiquetas hacia arriba para que no choquen con los cuadros para una mejor legibilidad.

El segundo gráfico en la parte inferior simplemente cambia las coordenadas y del mismo y=0 a y=0,1,2,3,4,5, convirtiéndolas así en una escalera, sin cambiar las orientaciones predeterminadas de las etiquetas. Además, en este gráfico, observará por qué las etiquetas se superponen si se colapsan en una única barra apilada horizontal.

En cuanto a la leyenda, un estilo de leyenda se define mediante legend style={area legend, at={(0.5,-0.15)}, anchor=north, legend columns=-1}.

ingrese la descripción de la imagen aquí

\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. El OP prefiere utilizar porcentajes en lugar de números. Luego reemplace las líneas correspondientes a nodes near coords={\pgfmathprintnumber\pgfplotspointmeta\%}.

  2. Para mover el título más arriba, agréguelo title style={yshift=10pt}al eje del primer gráfico porque el% agregado colisionará con el título en la configuración anterior.

  3. Para eliminar la rejilla en la parte superior, agregue axis on top=falsea latestbar/.style

Una vez realizados esos cambios, a continuación se muestra un nuevo resultado.

ingrese la descripción de la imagen aquí

información relacionada