我正在尝试使用 pgfplots 创建分组条形图,如下所示:
但我无法将值放在条形图上,如下所示:
我的代码是:
\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}
答案1
nodes near coords
单独使用,无需任何进一步的定制,就会在条形图顶部产生所需的节点。
这样做的缺点是,您的图例描述不再是标准nodes near coords
指令。处理这种情况的方法pgfplots
是使用legend entries
,例如以下示例:
\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}
这里,nodes near coords
绘制了各个条形值。legend entries
以及一些图例自定义,形成了图顶部的描述。
请注意,\strut
刻度标签会导致所有刻度标签具有相同的大小(甚至低于文本的基线),以便它们垂直对齐(感谢@egreg 的建议)。