
Ich versuche, mit pgfplots ein gruppiertes Balkendiagramm wie dieses zu erstellen:
aber ich kann die Werte nicht über die Balken setzen, wie hier:
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 coords
allein, 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 pgfplots
einem solchen Fall könnte man legend entries
beispielsweise verwenden, wie im folgenden Beispiel:
\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 coords
werden die einzelnen Balkenwerte gezeichnet. legend entries
Zusammen mit einer kleinen Anpassung der Legende ergibt dies die Beschreibung über dem Diagramm.
Beachten Sie, dass \strut
in 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).