ybar stacked:标签的位置

ybar stacked:标签的位置

我想以 ybar 堆叠的形式在图表中显示性能测试的一些结果,但如您所见,一些标签打印在其他标签上,难以阅读(因为颜色)。现在我想在条形图的右侧显示标签,例如这里,但是有没有自动的方法可以做到这一点,还是我必须自己创建所有标签?我可以让线条不水平移动,并瞄准堆栈元素的中心吗?

当前的:

当前的

希望:

希望

\documentclass[chapterprefix=true]{scrbook}
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}
\usepackage{tikz}
\usetikzlibrary{pgfplots.statistics}

\begin{document}

\begin{tikzpicture}
    \begin{axis}[
    ybar stacked,
    ymin = 0,
    ymax = 570,
    xtick=data,
    symbolic x coords={a, b},
    nodes near coords]
    \addplot coordinates{ (a, 2.9) (b, 2.9)};
    \addplot coordinates{ (a, 80) (b, 200)};
    \addplot coordinates{ (a, 400) (b, 100)};
    \end{axis}
\end{tikzpicture}

\end{document}

答案1

这是一个相对较短的方法。具体操作如下:

name=X标签指定一个(临时)名称,(X)然后我移动它,使它不再与条形重叠。

另一方面,我需要对原始位置的引用。所以我.append code用一个节点。您可以搜索node near coordpgfplots.code.tex查看前者附加在哪里。诀窍是声明(Y)紧随其后(X),因此(Y)应该位于标签应该所在的原始位置。

最后画出线条。现在你可以自己修改样式,使用bend left或类似的东西\draw[fill=none](Y.center)--+(10pt,0pt)--+(15pt,20pt)--(X);。注意这.center是必要的。

\documentclass{article}
\usepackage{pgfplots}\pgfplotsset{compat=1.12}\usetikzlibrary{pgfplots.statistics}

\begin{document}
\makeatletter
\begin{tikzpicture}
    \begin{axis}[
        ybar stacked,
        /pgfplots/nodes near coords*/.append style={
            every node near coord/.style={
                name=X,
                shift={(30pt,20pt)}
            },
            scatter/@post marker code/.append code={
                \node(Y){};
                \draw(X)--(Y.center);
            }
        },
        nodes near coords,
        ymin=0,ymax=570,xtick=data,symbolic x coords={a,b},
    ]
    \addplot coordinates{(a,   2.9)(b,   2.9)};
    \addplot coordinates{(a,  80  )(b, 200  )};
    \addplot coordinates{(a, 400  )(b, 100  )};
    \end{axis}
\end{tikzpicture}
\end{document}

相关内容