pgfplots 需要帮助使用数据表中选定的行来绘制复杂的堆积条形图

pgfplots 需要帮助使用数据表中选定的行来绘制复杂的堆积条形图

我正在尝试根据下面 MWE 中的数据表重新创建该条形图。

示例图表

它涉及做一些我无法弄清楚的事情:

  1. 将正数和负数条堆叠在同一轴上,这样负数就不会仅仅从正数中减去(这是的默认行为xbar stacked
  2. 仅从表中选择某些行。对于蓝色条形图,我只需要 1-3 行(将列标题计为第 0 行)。对于红色条形图,我需要第 4 行的两个实例和第 5 行的一个实例。
  3. 创建显示 SUM 列值的线条并创建数据标签。
  4. 使用第 2 列和第 3 列的列标题创建图例(即使第 3 列不包含实际数据)。
  5. 反转 y 轴上项目的顺序。请注意,MWE 中的类别从上到下倒数;我想要相反的顺序。

通过查看 MWE,您将了解我目前所取得的进展。至于其余部分,我感到相当困惑。我需要自动化这个过程,这是数据所采用的格式(因此重新格式化底层数据表并不是一个最佳解决方案)。

梅威瑟:

\documentclass{article}

\usepackage{pgfplots}
\usepackage{filecontents}

\begin{document}

\begin{filecontents}{data.dat}
category,value,negvalue
cat1,3,0
cat2,5,0
cat3,1,0
cat1and2n,-6,0
cat3n,-3,0
cat1sum,-3,0
cat2sum,-1,0
cat3sum,-2,0
\end{filecontents}

\pgfplotstableset{col sep=comma}
\pgfplotstableread{data.dat}\datatable

\begin{tikzpicture}
\begin{axis}[
xbar,
yticklabels from table={\datatable}{category},
ytick=data]

\addplot table[
y expr=\coordindex,
x=value]
{data.dat};
\end{axis}
\end{tikzpicture}

\end{document}

我很感激任何帮助!

答案1

对于 2.:您可以像在中一样过滤行自动计算并绘制两个图的差异

\pgfkeys{
    /tr/rowfilter/.style 2 args={
        /pgfplots/x filter/.append code={
            \edef\arga{\thisrow{#1}}
            \edef\argb{#2}
            \ifx\arga\argb
            \else
                \def\pgfmathresult{}
            \fi
        }
    }
}

但此过滤器仅适用于固定内容

\addplot table[/tr/rowfilter={category}{cat1sum}] {data.dat};

但这只给出了第 6 行。不幸的是,我对 TeX 了解不够,无法检查像 'cart[0-9]sum' 这样的模式

相关内容