我想创建一个基于表格的热图。答案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}