gruppiertes Balkendiagramm mit pgfplots

gruppiertes Balkendiagramm mit pgfplots

Ich versuche, mit pgfplots ein gruppiertes Balkendiagramm wie dieses zu erstellen:

Bildbeschreibung hier eingeben

aber ich kann die Werte nicht über die Balken setzen, wie hier:

Bildbeschreibung hier eingeben

Mein Code ist:

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

Antwort1

nodes near coordsallein, ohne weitere Anpassung, führt zu den gewünschten Knoten über den Balken.

Dies hat den Nachteil, dass Ihre Legendenbeschreibung keine Standardanweisung mehr ist nodes near coords. In pgfplotseinem solchen Fall könnte man legend entriesbeispielsweise verwenden, wie im folgenden Beispiel:

Bildbeschreibung hier eingeben

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

Hier nodes near coordswerden die einzelnen Balkenwerte gezeichnet. legend entriesZusammen mit einer kleinen Anpassung der Legende ergibt dies die Beschreibung über dem Diagramm.

Beachten Sie, dass \strutin den Teilstrichbeschriftungen alle Teilstrichbeschriftungen die gleiche Größe haben (auch unterhalb der Grundlinie des Textes), sodass sie vertikal ausgerichtet sind (danke @egreg für den Vorschlag).

verwandte Informationen