如何使用 xcolor 为 pgfplots 中表格中的特定单元格着色?xcolor 是这里最好的工具吗?我正在尝试循环遍历颜色列表并单独为列中的单元格着色。
\documentclass{article}
\usepackage{pgfplotstable,filecontents}
\RequirePackage{listofitems}
\usepackage{}
\begin{filecontents*}{test.csv}
ColA, ColB, ColC
0.17, 0.91, 0.67
0.15, 0.17, 0.92
0.48, 0.1, 0.28
\end{filecontents*}
\begin{document}
\pgfplotstabletypeset[col sep=comma,
]{test.csv}
\def\mylistOne{green, blue, orange}
\readlist*\mylistTwo{\mylistOne}
\newcounter{myCounter}
\setcounter{myCounter}{-1}
\foreachitem\x\in\mylistTwo[]{
\stepcounter{myCounter}
\pgfplotstableset{
every row \themyCounter column 1/.style={
\cellcolor{\x}
}
}
}
\end{document}
答案1
你需要的是
colortbl
(它提供\cellcolor
和\rowcolor
)。- 一条额外的指令,例如
pgfplotstable
知道您想要修改当前单元格的内容(而不是加载某些选项)。这是通过修改@cell content
内部来完成的every row 2 column 1/.style
。 - 扩展的修复:指令
every row \themyCounter column 1
扩展为类似的内容every row 3column 1
,即您需要添加\space
(根据 TeX 如何在宏名后吞噬空格的一般规则)。 - 修复循环内部扩展的问题:
\x
在样式内部写入会失败,因为 TeX 会插入名称\x
而不是其值 - 并且一旦循环迭代完成,名称就变得毫无意义。为了解决这个问题,我们需要控制扩展(比较我应该从哪里开始 LaTeX 编程?)
这是一个潜在的解决方案:
\documentclass{standalone}
\usepackage{pgfplotstable,filecontents}
\usepackage{colortbl}
\begin{filecontents*}{test.csv}
ColA, ColB, ColC
0.17, 0.91, 0.67
0.15, 0.17, 0.92
0.48, 0.1, 0.28
\end{filecontents*}
\begin{document}
\newcounter{myCounter}
\setcounter{myCounter}{-1}
% extracted this as separate macro such that I can get rid of the
% '\x' macro below
\def\kevinassigncolor#1{%
\pgfplotstableset{
every row \themyCounter\space column 1/.style={
postproc cell content/.style={
@cell content/.add={\cellcolor{#1}}{}%
},%
},
}%
}%
\pgfplotsforeachungrouped\x in{green,blue,orange}{%
\stepcounter{myCounter}%
% the \expandafter is a trick to ensure that \kevinassigncolor
% does not see the '\x':
% we must not write \cellcolor{\x} into a style because the
% meaning of \x will be lost as soon as we left this loop
% iteration!
% \expandafter inserts the _value_ of \x rather than '\x':
\expandafter\kevinassigncolor\expandafter{\x}%
}
\pgfplotstabletypeset[col sep=comma,
]{test.csv}
\end{document}
请注意,我用 替换\foreachitem
,但仅仅是因为我手头\pgfplotsforeachungrouped
没有包。listofitems
另请参阅相关申请使用 TikZ 绘制热图