如何使用 pgfplots 在条形图中的特定条上方写入?

如何使用 pgfplots 在条形图中的特定条上方写入?

我想将值放在条形图中的几个条上方。 这就是我想要的

对于那些值超过 1.7 的条形图,我会在 1.7 处截断条形图,并将其实际值写在该条形图的顶部。以下是我所得到的(仅针对其中 4 个条形图):

\begin{tikzpicture}
    \begin{axis}[
        %title={Comparing Push, Pull, Hyb, Gunrock(norm wrt Push) for Real-World Graphs for CC},
        width=\columnwidth,
        compat=newest,
        xlabel={Inputs},
        ylabel={Execution time (normalized)},
        ybar,
        bar width=7pt,
        symbolic x coords={RMAT-1M-1M, RMAT-15, RMAT-16, RMAT-17},
        xtick=data,
        enlargelimits=0.15,
        legend style={at={(0.5, -0.2)}, anchor=north, legend columns=-1},
    ]
    \addplot coordinates {(RMAT-1M-1M, 1) (RMAT-15, 1) (RMAT-16, 1) (RMAT-17, 1)};
    \addplot coordinates {(RMAT-1M-1M, 0.9853) (RMAT-15, 1.0452) (RMAT-16, 0.8697) (RMAT-17, 0.457)};
    \addplot coordinates {(RMAT-1M-1M, 0.9375) (RMAT-15, 0.9408) (RMAT-16, 0.718) (RMAT-17, 0.4078)};
    \addplot coordinates {(RMAT-1M-1M, 1.7) (RMAT-15, 1.7) (RMAT-16, 1.7) (RMAT-17, 1.7)};
    \legend{Push(Subway), Pull, Hybrid, Gunrock}
    \node[above] at ($(axis cs:RMAT-1M-1M,1.7)$) {3.4};
    \end{axis}
\end{tikzpicture}

但是,这样 3.4 就无法像我希望的那样精确地位于 RMAT-1M-1M 下的第 4 个条形图上方。如果我将轴 cs 线更改为:axis cs:RMAT-1M-1M+0.5,1.7,则会出现错误。我该如何修复此问题?

答案1

\documentclass[tikz, border=1cm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
width=10cm,
ybar,
bar width=7pt,
symbolic x coords={RMAT-1M-1M, RMAT-15, RMAT-16, RMAT-17},
xtick=data,
enlargelimits=0.15,
]
\addplot coordinates {(RMAT-1M-1M, 1) (RMAT-15, 1) (RMAT-16, 1) (RMAT-17, 1)};
\addplot coordinates {(RMAT-1M-1M, 0.9853) (RMAT-15, 1.0452) (RMAT-16, 0.8697) (RMAT-17, 0.457)};
\addplot coordinates {(RMAT-1M-1M, 0.9375) (RMAT-15, 0.9408) (RMAT-16, 0.718) (RMAT-17, 0.4078)};
\addplot coordinates {(RMAT-1M-1M, 1.7) (RMAT-15, 1.7) (RMAT-16, 1.7) (RMAT-17, 1.7)};
\node[above] at ([xshift=\pgfkeysvalueof{/pgf/bar shift}]axis cs:RMAT-1M-1M,1.7) {3.4};
\end{axis}
\end{tikzpicture}
\end{document}

条形图,其中一条条形上方带有标签

每个条形图自动移动的量如下:

\pgfplotsset{
    /pgfplots/bar shift auto/.style={
        /pgf/bar shift={%
            % total width = n*w + (n-1)*skip
            % -> subtract half for centering
            -0.5*(\numplotsofactualtype*\pgfplotbarwidth + (\numplotsofactualtype-1)*(#1)) +
            % the '0.5*w' is for centering
            (.5+\plotnumofactualtype)*\pgfplotbarwidth + \plotnumofactualtype*(#1)},
}, }

-如果您想要精确的数字来移动示例中四个条形图中的每一个的标签。

相关内容