来自数据表的堆积条形图,点元数据的格式

来自数据表的堆积条形图,点元数据的格式

我有一个数据表,每个 x 有多个 y 值,我已将其排列为堆叠条形图。似乎 pgfplots 可以根据绝对值计算百分比,但我暂时还是自己计算百分比。我已经从这里关于point meta=explicit,但我无法摆脱“0”值,并且我还希望 x 值显示在其栏的中心。

\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\begin{document}

\begin{tikzpicture}
    \pgfplotstableread{
        Label   A       B       C       Aabs    Babs    Cabs
        data1   0.70    0.00    0.30    7       0       3
        data2   0.33    0.67    0.00    6       12      0
        data3   0.75    0.00    0.25    3       0       1
        data4   0.50    0.25    0.25    4       2       2
    }\dt

    \begin{axis}[
            hide x axis,
            nodes near coords,
            xbar stacked,
            xmin=0,
            y dir=reverse,
            ytick=data,
            yticklabels from table={\dt}{Label},
        ]

        \addplot [
            fill=red!25,
            point meta=explicit,
        ] table [
            x=A,
            y expr=\coordindex,
            meta=Aabs,
        ] {\dt};
        
        \addplot [
            fill=green!25,
            point meta=explicit,
        ] table [
            x=B,
            y expr=\coordindex,
            meta=Babs,
        ] {\dt};
        
        \addplot [
            fill=blue!25,
            point meta=explicit,
        ] table [
            x=C,
            y expr=\coordindex,
            meta=Cabs,
        ] {\dt};
    \end{axis}
\end{tikzpicture}

\end{document}

标签未对齐的条形图图像

答案1

您想要的是堆叠图的默认行为。您需要在选项xbar stacked之前指定选项,nodes near coords如下所示:

\documentclass[tikz, border=1cm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\usepackage{pgfplotstable}
\begin{document}
\begin{tikzpicture}
\pgfplotstableread{
Label   A       B       C       Aabs    Babs    Cabs
data1   0.70    0.00    0.30    7       0       3
data2   0.33    0.67    0.00    6       12      0
data3   0.75    0.00    0.25    3       0       1
data4   0.50    0.25    0.25    4       2       2
}\dt
\begin{axis}[
xbar stacked, nodes near coords,
hide x axis,
xmin=0,
y dir=reverse,
ytick=data,
yticklabels from table={\dt}{Label},
point meta=explicit,
]
\addplot[fill=red!25] table[x=A, y expr=\coordindex, meta=Aabs] {\dt};
\addplot[fill=green!25] table[x=B, y expr=\coordindex, meta=Babs] {\dt};
\addplot[fill=blue!25] table[x=C, y expr=\coordindex, meta=Cabs] {\dt};
\end{axis}
\end{tikzpicture}
\end{document}

带中心数字的堆积条形图

相关内容