我正在尝试根据下面 MWE 中的数据表重新创建该条形图。
它涉及做一些我无法弄清楚的事情:
- 将正数和负数条堆叠在同一轴上,这样负数就不会仅仅从正数中减去(这是的默认行为
xbar stacked
) - 仅从表中选择某些行。对于蓝色条形图,我只需要 1-3 行(将列标题计为第 0 行)。对于红色条形图,我需要第 4 行的两个实例和第 5 行的一个实例。
- 创建显示 SUM 列值的线条并创建数据标签。
- 使用第 2 列和第 3 列的列标题创建图例(即使第 3 列不包含实际数据)。
- 反转 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' 这样的模式