我有一张ybar
使用pgfplots
我用来nodes near coords
显示的包是靠近条形顶部的值。数据中有一些离群值,我想显示一个填充到图表顶部的条形。在这种情况下,是值应显示在条形图的中间。我尝试使用为这些异常值的坐标附近的节点visualization depends on
设置不同的值。但是,似乎 pgfplots 根本没有绘制这些节点,因为即使这样,节点仍然没有显示。yshift
yshift
下面的例子说明了这一点。在这里,我将大于 6 的值的节点移位。第一个值正确地放置在栏上方;第二个值正确地向下移动。但是,最后一个值 ( (3,9)
) 根本没有出现。我怎样才能让这个节点也出现?
注意:这里的值\myshift
尚未最终确定;我还没有找到一个合适的方法来计算它。欢迎提出建议。
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
ybar,
ymin=0,ymax=8,
xmin=0,xmax=4,
nodes near coords,
visualization depends on={ifthenelse(y>6,-y,0) \as \myshift},
every node near coord/.append style={yshift=\myshift em}]
\addplot coordinates {(1,5) (2,7) (3,9)};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
这不是你想要的,但我认为这比将移到nodes near coords
栏中间要好。相反,我仍然将其写在它的上面,尽管它被“截断”了。
% used PGFPlots v1.16
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
ybar,
xmin=0,
xmax=4,
ymin=0,
ymax=8,
xtick=data,
% -----------------------------------------------------------------
% 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}
},
% -----------------------------------------------------------------
]
\addplot coordinates {(1,5) (2,7) (3,10)};
\end{axis}
\end{tikzpicture}
\end{document}
答案2
也许clip = false
就是您所寻找的。
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
ybar,
ymin = 0,
ymax = 8,
xmin = 0,
xmax = 4,
nodes near coords,
clip = false, % <--- Added
]
\addplot coordinates {(1,5) (2,7) (3,9)};
\end{axis}
\end{tikzpicture}
\end{document}
更新 1
这几乎有效——如果我使用,clip = true
那么9
底部就不会再打印了(奇怪的是)。
也许这里的一些专家可以支持。
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
% Based on
% https://tex.stackexchange.com/questions/110879
\begin{tikzpicture}
\begin{axis}[
ybar,
ymin = 0,
ymax = 8,
xmin = 0,
xmax = 4,
nodes near coords,
clip = false, % <--- Added, `true` does not work
visualization depends on = y \as \myYOffset, % <--- Added
every node near coord/.append style = {
shift = { (axis direction cs: 0, -\myYOffset) } % <--- Added
},
]
\addplot coordinates {(1,5) (2,7) (3,9)};
\end{axis}
\end{tikzpicture}
\end{document}
答案3
与 Manuel Kuehner 博士的回答非常相似,只是情节剪辑是手动添加的。
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{tikzpicture}
\begin{axis}[clip=false,
ybar,
ymin=0,ymax=8,
xmin=0,xmax=4,
nodes near coords,
visualization depends on={y \as \myy},
nodes near coords style={at={(0,-\myy/2)}}]
\clip (current axis.south west) rectangle (current axis.north east);
\addplot coordinates {(1,5) (2,7) (3,9)};
\end{axis}
\end{tikzpicture}
\end{document}