我想以某种方式指示高于绘图区域的条形的值。也许通过将标签放在条形内或绘图区域边界上方。请注意,我只想要“离开”绘图区域的条形的标签,也就是说,(b, 7)
在(c, 6)
这种情况下。
我想要:
我有:
我正在尝试nodes near cords
和point meta=explicit symbolic
选项,但目前还没有成功。
\begin{tikzpicture}
\begin{axis}[
ybar,
symbolic x coords={a, b, c},
xtick=data,
ymax=5,
% nodes near coords,
% nodes near coords align={vertical},
% point meta=explicit symbolic
]
\addplot coordinates {(a, 3) (b, 7)[7] (c, 1) };
\addplot coordinates {(a, 2) (b, 4) (c, 6)[6] };
\addplot coordinates {(a, 4) (b, 1) (c, 3) };
\end{axis}
\end{tikzpicture}
答案1
这可以通过修改来实现这个答案。有关其工作原理的详细信息,请查看代码中的注释。
% used PGFPlots v1.14
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
% create a variable to store the `ymax' value
\pgfmathsetmacro{\ymax}{5}
\begin{axis}[
ybar,
symbolic x coords={a, b, c},
xtick=data,
% use the previously created variable here
ymax=\ymax,
% (this i just added so the outer most bars aren't clipped partially)
enlarge x limits={0.2},
% -----------------------------------------------------------------
% we store the *original* y value in a variable ...
visualization depends on={rawy \as \rawy},
% ... which value should be shown in the `nodes near coords' ...
nodes near coords={\pgfmathprintnumber\rawy},
% ... and we want to limit the range of the bars to the axis limits
restrict y to domain*={
\pgfkeysvalueof{/pgfplots/ymin}:\pgfkeysvalueof{/pgfplots/ymax}
},
% ---------------------------------------------------------------------
% now we create a style for the `nodes near coords' which is dependend
% on the value
% (adapted from <http://tex.stackexchange.com/a/141006/95441>)
% (#1: the THRESHOLD after which we switch to a special display)
nodes near coords greater equal only/.style={
% define the style of the nodes with "small" values
small value/.style={
/tikz/coordinate,
},
every node near coord/.append style={
check for small values/.code={
\begingroup
% this group is merely to switch to FPU locally.
% Might be unnecessary, but who knows.
\pgfkeys{/pgf/fpu}
\pgfmathparse{\pgfplotspointmeta<#1}
\global\let\result=\pgfmathresult
\endgroup
%
% simplifies debugging:
%\show\result
%
\pgfmathfloatcreate{1}{1.0}{0}
\let\ONE=\pgfmathresult
\ifx\result\ONE
% AH: our condition 'y < #1' is met.
\pgfkeysalso{/pgfplots/small value}
\fi
},
check for small values,
},
},
% asign a value to the new style which is the threshold at which
% the `small value' style is used.
% Of course in this case it should be the `\ymax' value
nodes near coords greater equal only=\ymax,
% -----------------------------------------------------------------
]
\addplot coordinates {(a, 3) (b, 7) (c, 1)};
\addplot coordinates {(a, 2) (b, 4) (c, 6)};
\addplot coordinates {(a, 4) (b, 1) (c, 3)};
\end{axis}
\end{tikzpicture}
\end{document}