是否有一种简单的方法可以根据每个单元格中的值为表格着色?

是否有一种简单的方法可以根据每个单元格中的值为表格着色?

我看过这个帖子相关表的条件格式解决了我的问题,但是......

在此处输入图片描述

有没有更简单的方法(或替代方法)来使用颜色来实现这一点?

谢谢。 ------------------ 显示后编辑,然后显示重复 ------------- 我认为有很多 sols,但是例如使用没有 pgf 的普通表格很容易...

Unas 的回答很有趣

我正在尝试使用相似的颜色来应用到表格概率中

答案1

改编自我在问题评论中提到的链接(即单击这里),下面是一个解决方案,其产生以下内容:

在此处输入图片描述

该解决方案与从上述链接获取的基本代码之间的细微差别在于,该解决方案引入了最大值、最小值和中点值,因此对于数字的下半部分(黄色 -> 红色)实现一个渐变,对于数字的上半部分(黄色 -> 绿色)实现另一个渐变。

我还为计算值添加了最大/最小限制,使它们在 0 到 100 的范围内,如果它们超出此值,则会引发错误。

以下是执行此操作的代码:

\documentclass[12pt]{article}
\usepackage{tikz}
\usepackage{collcell}

 %The min, mid and max values
\newcommand*{\MinNumber}{0.0}%
\newcommand*{\MidNumber}{0.5} %
\newcommand*{\MaxNumber}{1.0}%

%Apply the gradient macro
\newcommand{\ApplyGradient}[1]{%
        \ifdim #1 pt > \MidNumber pt
            \pgfmathsetmacro{\PercentColor}{max(min(100.0*(#1 - \MidNumber)/(\MaxNumber-\MidNumber),100.0),0.00)} %
            \hspace{-0.33em}\colorbox{green!\PercentColor!yellow}{#1}
        \else
            \pgfmathsetmacro{\PercentColor}{max(min(100.0*(\MidNumber - #1)/(\MidNumber-\MinNumber),100.0),0.00)} %
            \hspace{-0.33em}\colorbox{red!\PercentColor!yellow}{#1}
        \fi
}

\newcolumntype{R}{>{\collectcell\ApplyGradient}c<{\endcollectcell}}
\renewcommand{\arraystretch}{0}
\setlength{\fboxsep}{3mm} % box size
\setlength{\tabcolsep}{0pt}

\begin{document}
    \begin{table}[ht]
        \begin{center}
            \begin{tabular}{*{10}{R}}
              1.00 & 1.00 & 1.00 & 1.00 & 0.99 & 0.98 & 0.96 & 0.90 & 0.82 & 0.37 \\
              1.00 & 1.00 & 0.99 & 0.98 & 0.95 & 0.90 & 0.82 & 0.61 & 0.37 & 0.01 \\
              1.00 & 0.99 & 0.98 & 0.96 & 0.90 & 0.82 & 0.67 & 0.37 & 0.14 & 0.00 \\
              1.00 & 0.98 & 0.95 & 0.90 & 0.78 & 0.61 & 0.37 & 0.08 & 0.01 & 0.00 \\
              0.99 & 0.95 & 0.90 & 0.82 & 0.61 & 0.37 & 0.14 & 0.01 & 0.00 & 0.00 \\
              0.98 & 0.90 & 0.82 & 0.67 & 0.37 & 0.14 & 0.02 & 0.00 & 0.00 & 0.00 \\
              0.95 & 0.78 & 0.61 & 0.37 & 0.08 & 0.01 & 0.00 & 0.00 & 0.00 & 0.00 \\
              0.90 & 0.61 & 0.37 & 0.14 & 0.01 & 0.00 & 0.00 & 0.00 & 0.00 & 0.00 \\
              0.82 & 0.37 & 0.14 & 0.02 & 0.00 & 0.00 & 0.00 & 0.00 & 0.00 & 0.00 \\
              0.37 & 0.01 & 0.00 & 0.00 & 0.00 & 0.00 & 0.00 & 0.00 & 0.00 & 0.00 \\
            \end{tabular}
        \end{center}
    \end{table}
\end{document}

顺便说一下,我发现制作如下的东西非常令人沮丧,其中并非所有的单元格都受到阴影的影响,并且还有标题行等等。我相信有一种更迷人的方法可以做到这一点,我有兴趣了解如何......

在此处输入图片描述

答案2

在此处输入图片描述

如果您使用 pgfplotstable/tikz,链接的问题会给出答案,但如果您只想要着色而不是这些包的其他功能,则不需要它们。以下内容将逗号上的数字对齐,并根据值提供三种背景颜色之一。

\documentclass{article}

\usepackage{colortbl,dcolumn}

\def\zz#1{%
\ifdim#1pt<5pt\cellcolor{green}\else
\ifdim#1pt<50pt\cellcolor{yellow}\else
\cellcolor{red}\fi\fi
#1}


\begin{document}



\begin{tabular}{*3{D,,{2.2}}c}
\zz {1,2} &\zz  {3,04}  &\zz {5,44}  \\
\zz {1,01}&\zz {77,5}  &\zz {77,94} \\
\zz {3,42}&\zz   {4,04} &\zz {51,04} 
\end{tabular}

\end{document}

答案3

如果您想在表格中使用非数字标题,Nicholas Hamilton 的解决方案不起作用。我找到了以下解决方法(https://tex.stackexchange.com/a/40603):

\documentclass[12pt]{article}
\usepackage{tikz}
\usepackage{collcell}

% https://tex.stackexchange.com/a/40603 - only color in table body
\usepackage{etoolbox}

\newtoggle{inTableHeader}% Track if still in header of table
\toggletrue{inTableHeader}% Set initial value
\newcommand*{\StartTableHeader}{\global\toggletrue{inTableHeader}}%
\newcommand*{\EndTableHeader}{\global\togglefalse{inTableHeader}}%

% Redefine tabular to initialize \StartTableHeader at start and end
\let\OldTabular\tabular%
\let\OldEndTabular\endtabular%
\renewenvironment{tabular}{\StartTableHeader\OldTabular}{\OldEndTabular\StartTableHeader}%

 %The min, mid and max values
\newcommand*{\MinNumber}{0.0}%
\newcommand*{\MidNumber}{0.5} %
\newcommand*{\MaxNumber}{1.0}%

%Apply the gradient macro
\newcommand{\ApplyGradient}[1]{%
  \iftoggle{inTableHeader}{#1}{
    \ifdim #1 pt > \MidNumber pt
        \pgfmathsetmacro{\PercentColor}{max(min(100.0*(#1 - \MidNumber)/(\MaxNumber-\MidNumber),100.0),0.00)} %
        \hspace{-0.33em}\colorbox{green!\PercentColor!yellow}{#1}
    \else
        \pgfmathsetmacro{\PercentColor}{max(min(100.0*(\MidNumber - #1)/(\MidNumber-\MinNumber),100.0),0.00)} %
        \hspace{-0.33em}\colorbox{red!\PercentColor!yellow}{#1}
    \fi
  }}

\newcolumntype{R}{>{\collectcell\ApplyGradient}c<{\endcollectcell}}
\renewcommand{\arraystretch}{0}
\setlength{\fboxsep}{3mm} % box size
\setlength{\tabcolsep}{0pt}

\begin{document}
    \begin{table}[ht]
        \begin{center}
            \begin{tabular}{*{10}{R}}
              A    & B    & C    & D    & E    & F    & G    & H    & I    & J    \EndTableHeader\\
              \hline
              1.00 & 1.00 & 1.00 & 1.00 & 0.99 & 0.98 & 0.96 & 0.90 & 0.82 & 0.37 \\
              1.00 & 1.00 & 0.99 & 0.98 & 0.95 & 0.90 & 0.82 & 0.61 & 0.37 & 0.01 \\
              1.00 & 0.99 & 0.98 & 0.96 & 0.90 & 0.82 & 0.67 & 0.37 & 0.14 & 0.00 \\
              1.00 & 0.98 & 0.95 & 0.90 & 0.78 & 0.61 & 0.37 & 0.08 & 0.01 & 0.00 \\
              0.99 & 0.95 & 0.90 & 0.82 & 0.61 & 0.37 & 0.14 & 0.01 & 0.00 & 0.00 \\
              0.98 & 0.90 & 0.82 & 0.67 & 0.37 & 0.14 & 0.02 & 0.00 & 0.00 & 0.00 \\
              0.95 & 0.78 & 0.61 & 0.37 & 0.08 & 0.01 & 0.00 & 0.00 & 0.00 & 0.00 \\
              0.90 & 0.61 & 0.37 & 0.14 & 0.01 & 0.00 & 0.00 & 0.00 & 0.00 & 0.00 \\
              0.82 & 0.37 & 0.14 & 0.02 & 0.00 & 0.00 & 0.00 & 0.00 & 0.00 & 0.00 \\
              0.37 & 0.01 & 0.00 & 0.00 & 0.00 & 0.00 & 0.00 & 0.00 & 0.00 & 0.00 \\
            \end{tabular}
        \end{center}
    \end{table}
\end{document}

得出:

生成的表格

答案4

根据之前的答案,要忽略任何不包含十进制数的字段,您可以使用xstring\IfDecimal{}{}{}宏,例如:

\newcommand{\ApplyGradient}[1]{%
    \IfDecimal{#1}{
        \ifdim #1 pt > \MidNumber pt
            \pgfmathsetmacro{\PercentColor}{max(min(100.0*(#1 - \MidNumber)/(\MaxNumber-\MidNumber),100.0),0.00)}
            \edef\x{ \noexpand\cellcolor{green!\PercentColor!yellow} }
            \x #1
        \else
            \pgfmathsetmacro{\PercentColor}{max(min(100.0*(\MidNumber - #1)/(\MidNumber-\MinNumber),100.0),0.00)}
            \edef\x{ \noexpand\cellcolor{red!\PercentColor!yellow} }
            \x #1
        \fi
    }{#1}
}

相关内容