堆叠条形图第一部分出现问题

堆叠条形图第一部分出现问题

我想在文档中创建标准化堆叠条形图。但不知何故,条形图的第一部分出现了问题。是什么原因导致此错误?

我的代码

\documentclass{standalone}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.17}

\pgfplotstableread[col sep=comma]{
55,10,1,2,10
52,4,2,3,1
%18,0,2,3,4
%....
}\data

\pgfplotstablecreatecol[
 create col/expr={
    \thisrow{1} + \thisrow{2} + \thisrow{3} + \thisrow{4}
 }
]{sum}{\data}

\newcommand{\stackedbar}[1]{
\begin{tikzpicture}
\begin{axis}[
    xbar stacked, 
    point meta=\thisrow{y},
    table/y expr=\coordindex,
    table/x expr=\thisrow{y}/\thisrow{sum},
%    x filter/.append expression={\thisrow{0} == #1 ? x : nan},
    nodes near coords,
]
    \addplot table[y=1]{\data};
    \addplot table[y=2]{\data};
    \addplot table[y=3]{\data};
    \addplot table[y=4]{\data};
\end{axis}
\end{tikzpicture}
}

\begin{document}
\stackedbar{55}
%\stackedbar{52}
\end{document}

输出

输出效果不佳,第一段只画了一半,标签偏移量很奇怪

正如我们所见,第一个段以某种方式被部分绘制,但段的中心可能被正确计算(图形左侧奇怪的标签位置)。

神秘的自我修复

有趣的是,如果我在表格的最后一行进行注释,其他行就会自行修复,并且现在可以正确绘制。 包括表格的最后一行,其他行均正确显示


(我在代码中注释掉了环境的预期用途stackedbar。我想内联使用环境并一次只过滤掉表中的一行。)

答案1

感谢@hpekristiansen,xmin=0当将其作为轴选项包含时,解决了该问题。

我附加了我的预期用途和输出:

\documentclass{article}
\usepackage{pgfplotstable}
\usepackage{lipsum}
\pgfplotsset{compat=1.17}

\pgfplotstableread[col sep=comma]{
55,10,1,2,10
52,4,2,3,1
18,0,2,3,4
%....
}\data

\pgfplotstablecreatecol[
 create col/expr={
    \thisrow{1} + \thisrow{2} + \thisrow{3} + \thisrow{4}
 }
]{sum}{\data}

\newcommand{\stackedbar}[1]{
\begin{tikzpicture}
\begin{axis}[
    xbar stacked, 
    point meta=\thisrow{y},
    table/y expr=\coordindex,
    table/x expr=\thisrow{y}/\thisrow{sum},
    xmin=0,
    x filter/.append expression={\thisrow{0} == #1 ? x : nan},
    nodes near coords,
    ticks=none,
    axis lines=none,
    inner sep = 0,
    outer sep = 0,
    width=1.095\linewidth,
    scale only axis,
]
    \addplot table[y=1]{\data};
    \addplot table[y=2]{\data};
    \addplot table[y=3]{\data};
    \addplot table[y=4]{\data};
\end{axis}
\end{tikzpicture}
}

\begin{document}
This is what I wanted to achieve: show a single data row inline.\\
\stackedbar{55}\\
\lipsum[1]
This is what I wanted to achieve: show another data row inline.\\
\stackedbar{52}\\
\lipsum[2-3]\\
\stackedbar{18}
\end{document}

在此处输入图片描述

相关内容