如何使用 xcolor 为 pgfplot 着色

如何使用 xcolor 为 pgfplot 着色

如何使用 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 绘制热图

相关内容