为 \cellcolor 命令提供与值相关的颜色

为 \cellcolor 命令提供与值相关的颜色

我想创建一个基于表格的热图。答案https://tex.stackexchange.com/a/175035/70170看起来就像我需要的,但我不想使用三种固定的颜色,而是想\cellcolor{}用一种依赖于单元格值的颜色来调用。

这是我的尝试:

\documentclass{article}

\usepackage{colortbl}
\usepackage{pgfplots}

\begin{document}

\newcommand*{\MinNumber}{6}%
\newcommand*{\MidNumber}{8} %
\newcommand*{\MaxNumber}{14}%

\def\zz#1{%
  \ifdim #1 pt > \MidNumber pt
     \pgfmathparse{int(100*((#1 - \MidNumber)/(\MaxNumber-\MidNumber)))} %
     \cellcolor{yellow!\pgfmathresult!red} 
  \else
     \pgfmathparse{int(100*((\MidNumber - #1)/(\MidNumber-\MinNumber)))} %
     \cellcolor{green!\pgfmathresult!yellow} 
  \fi
#1}

\begin{table}[]
\begin{tabular}{ccc}
  \zz{6}  & \zz{7}  & \zz{8}  \\
  \zz{9}  & \zz{10} & \zz{11} \\
  \zz{12} & \zz{13} & \zz{14}
\end{tabular}
\end{table}

\end{document}

不幸的是,这不会产生预期的渐变结果,而只会产生纯黄色或纯红色单元格。我打印了\pgfmathresult以检查计算是否正确,还尝试了一些硬编码偏移量yellow!20!red,例如,它也有效。

我肯定忽略了显而易见的东西,但就是搞不清楚它是什么。如果 TeX 专家能提供帮助,我将不胜感激 - 谢谢!

请注意,我并不是在寻找创建热图表的替代方法,而是在寻找一种使用 来修复该方法的\colortbl方法\cellcolor

答案1

\cellcolor应该是(扩展后)单元格中的第一个项目,并且其之前没有不可扩展的标记。

您可以使用\fpeval

\documentclass{article}

\usepackage[table]{xcolor}
\usepackage{pgfplots}

\ExplSyntaxOn

\NewExpandableDocumentCommand{\fpcompareTF}{mmm}
 {
  \fp_compare:nTF { #1 } { #2 } { #3 }
 }

\ExplSyntaxOff

\begin{document}

\newcommand*{\MinNumber}{6}%
\newcommand*{\MidNumber}{8} %
\newcommand*{\MaxNumber}{14}%

\newcommand{\zz}[1]{%
  \fpcompareTF{#1>\MidNumber}{%
    \cellcolor{%
      yellow!\fpeval{round(100*((#1 - \MidNumber)/(\MaxNumber-\MidNumber)),0)}!red%
    }%
  }{%
    \cellcolor{%
      green!\fpeval{round(100*((\MidNumber - #1)/(\MidNumber-\MinNumber)),0)}!yellow%
    }%
  }%
  #1%
}

\begin{table}[htp]
\begin{tabular}{ccc}
  \zz{6}  & \zz{7}  & \zz{8}  \\
  \zz{9}  & \zz{10} & \zz{11} \\
  \zz{12} & \zz{13} & \zz{14}
\end{tabular}
\end{table}

\end{document}

在此处输入图片描述

相关内容