gráfico de barras agrupadas con pgfplots

gráfico de barras agrupadas con pgfplots

Estoy intentando crear un gráfico de barras agrupadas con pgfplots, como este:

ingrese la descripción de la imagen aquí

pero no puedo poner los valores sobre las barras, como esta:

ingrese la descripción de la imagen aquí

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 coordspor 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 coordsinstrucción estándar. La forma en que pgfplotsse maneja tal caso sería usar legend entries, tal vez como en el siguiente ejemplo:

ingrese la descripción de la imagen aquí

\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 coordsdibuja 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 \struten 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).

información relacionada