
Estoy intentando crear un gráfico de barras agrupadas con pgfplots, como este:
pero no puedo poner los valores sobre las barras, como esta:
Mi código es:
\documentclass{article}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\pgfplotsset{compat=newest}
\usepackage{caption}
\usepackage{polyglossia}
\setdefaultlanguage{portuges}
\begin{document}
\begin{figure}[h]
\makeatletter
\pgfplotsset{
calculate offset/.code={
\pgfkeys{/pgf/fpu=true,/pgf/fpu/output format=fixed}
\pgfmathsetmacro\testmacro{(\pgfplotspointmeta *10^\pgfplots@data@scale@trafo@EXPONENT@y)*\pgfplots@y@veclength)}
\pgfkeys{/pgf/fpu=false}
},
every node near coord/.style={
/pgfplots/calculate offset,
yshift=-\testmacro
}
}
%0 - aramente 1 - Às vezes 2 - Quase sempre 4 - Sempre
\pgfplotstableread{
%2013-2014 %2012-2013 %2011-2012
0 32 35 20
1 28 45 23
2 30 24 25
3 10 68 70
}\dataset
\begin{tikzpicture}
\begin{axis}[ybar,
width=12cm,
height=8cm,
ymin=0,
ymax=100,
ylabel={Percentagem},
xtick=data,
xticklabels = {
Raramente,
Às vezes,
Quase sempre,
Sempre
%Category 5,
%Category 6
},
xticklabel style={yshift=-10ex},
major x tick style = {opacity=0},
minor x tick num = 1,
minor tick length=2ex,
every node near coord/.append style={
anchor=east,
rotate=90
}
]
\addplot[draw=black,fill=blue!20, nodes near coords=2013-2014] table[x index=0,y index=1] \dataset; %ano de 2013-2014
\addplot[draw=black,fill=blue!40, nodes near coords=2012-2013] table[x index=0,y index=2] \dataset; %ano de 2012-2013
\addplot[draw=black,fill=blue!60, nodes near coords=2011-2012] table[x index=0,y index=3] \dataset; %ano de 2011-2012
\end{axis}
\end{tikzpicture}
\captionsetup{justification=centerlast, margin=10ex, labelfont=bf, textfont=it, format=plain, labelformat=default, labelsep=endash, font=small, name=Gráfico\,}
\caption{Em sua casa é costume desligar os equipamentos no controlo remoto, deixando-os em standby (modo de “espera”)?}\label{Questao01}
\end{figure}
\end{document}
Respuesta1
nodes near coords
por sí solo, sin ninguna personalización adicional, da como resultado los nodos deseados en la parte superior de las barras.
Esto tiene la desventaja de que la descripción de su leyenda ya no es una nodes near coords
instrucción estándar. La forma en que pgfplots
se maneja tal caso sería usar legend entries
, tal vez como en el siguiente ejemplo:
\documentclass{article}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\pgfplotsset{compat=newest}
\usepackage{caption}
\begin{document}
\thispagestyle{empty}
\begin{figure}[h]
%0 - aramente 1 - Às vezes 2 - Quase sempre 4 - Sempre
\pgfplotstableread{
%2013-2014 %2012-2013 %2011-2012
0 32 35 20
1 28 45 23
2 30 24 25
3 10 68 70
}\dataset
\begin{tikzpicture}
\begin{axis}[ybar,
width=12cm,
height=8cm,
ymin=0,
ymax=100,
ylabel={Percentagem},
xtick=data,
xticklabels = {
\strut Raramente,
\strut Às vezes,
\strut Quase sempre,
\strut Sempre
%Category 5,
%Category 6
},
%xticklabel style={yshift=-10ex},
major x tick style = {opacity=0},
minor x tick num = 1,
minor tick length=2ex,
every node near coord/.append style={
anchor=west,
rotate=90
},
legend entries={2013-2014 ,2012-2013 ,2011-2012 },
legend columns=3,
legend style={draw=none,nodes={inner sep=3pt}},
]
\addplot[draw=black,fill=blue!20, nodes near coords] table[x index=0,y index=1] \dataset; %ano de 2013-2014
\addplot[draw=black,fill=blue!40, nodes near coords] table[x index=0,y index=2] \dataset; %ano de 2012-2013
\addplot[draw=black,fill=blue!60, nodes near coords] table[x index=0,y index=3] \dataset; %ano de 2011-2012
\end{axis}
\end{tikzpicture}
\captionsetup{justification=centerlast, margin=10ex, labelfont=bf, textfont=it, format=plain, labelformat=default, labelsep=endash, font=small, name=Gráfico\,}
\caption{Em sua casa é costume desligar os equipamentos no controlo remoto, deixando-os em standby (modo de “espera”)?}\label{Questao01}
\end{figure}
\end{document}
Aquí, nodes near coords
dibuja los valores de las barras individuales. El legend entries
, junto con un poco de personalización de la leyenda, da como resultado la descripción en la parte superior de la trama.
Tenga en cuenta que \strut
en las etiquetas de marca hace que todas las etiquetas de marca tengan el mismo tamaño (incluso debajo de la línea base del texto), de modo que estén alineadas verticalmente (gracias @egreg por la sugerencia).