即使超出范围(clip = true),如何显示“坐标附近的节点”?

即使超出范围(clip = true),如何显示“坐标附近的节点”?

我有一张ybar使用pgfplots我用来nodes near coords显示的包靠近条形顶部的值。数据中有一些离群值,我想显示一个填充到图表顶部的条形。在这种情况下,值应显示在条形图的中间。我尝试使用为这些异常值的坐标附近的节点visualization depends on设置不同的值。但是,似乎 pgfplots 根本没有绘制这些节点,因为即使这样,节点仍然没有显示。yshiftyshift

下面的例子说明了这一点。在这里,我将大于 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}

在此处输入图片描述

相关内容