如何在一个单元格中插入两种颜色?

如何在一个单元格中插入两种颜色?

我只想用两种颜色范围填充一个单元格,就像热图一样,参见下图。

在此处输入图片描述

答案1

这个问题吸引了我:如何根据单元格中的值自动为表格条目着色?也就是说,我们如何制作不那么随机的表格

\begin{tabular}{ *7H }
-1.0 & -0.9 & -0.8 & -0.7 & -0.6 & -0.5 & -0.4 \\
-0.3 & -0.2 & -0.1 &  0.0 &  0.1 &  0.2 &  0.3 \\
 0.4 &  0.5 &  0.6 &  0.7 &  0.8 &  0.9 &  1.0 \\
\multicolumn{7}{c}{Min
   \tikz{\shade[left color=blue,right color=red] 
          (current page.south west) rectangle ++(#1,12pt);}
    Max}
\end{tabular}

产生以下内容?

在此处输入图片描述

[原帖作者可能主要想问的是绘制渐变阴影,但正如 John Kormylo 在评论中所说(以及上面显示的那样),这很容易做到,使用蒂克兹

在回答这个问题时,我假设这些矩阵的条目在和之间-1——1很容易将下面的代码更改为适用于其他域。要根据条目的值自动为每个单元格分配背景颜色,我首先使用大批定义新列类型的包

\newcolumntype{H}{>{\collectcell\Heat}r<{\endcollectcell}}

反过来,H列类型使用胶原细胞包将命令应用于\Heat每个单元格条目。宏首先使用将单元格条目映射到和\Heat之间的整数0100数学

\pgfmathparse{int(50+50*#1)}% map number in [-1,1] to [0,100]

然后,这个数字用于设置单元格的背景颜色\cellcolor{red!\pgfmathresult!blue}-- 虽然实际上这里需要一点扩展技巧。有了这些定义,上面的代码就可以实现我想要的效果了。

完整代码如下:

\documentclass{article}
\usepackage[table]{xcolor}
\usepackage{collcell}
\usepackage{array}
\usepackage{tikz}
\newcolumntype{H}{>{\collectcell\Heat}r<{\endcollectcell}}

\newcommand\Heat[1]{% \Heat{number in the interval [-1,1]}
    \pgfmathparse{int(50+50*#1)}% map number in [-1,1] to [0,100]
    \edef\HeatCell{\noexpand\cellcolor{red!\pgfmathresult!blue}}%
    \HeatCell$#1$%
}

\begin{document}

\begin{tabular}{ *7H }
-1.0 & -0.9 & -0.8 & -0.7 & -0.6 & -0.5 & -0.4 \\
-0.3 & -0.2 & -0.1 &  0.0 &  0.1 &  0.2 &  0.3 \\
 0.4 &  0.5 &  0.6 &  0.7 &  0.8 &  0.9 &  1.0 \\
\multicolumn{7}{c}{Min
   \tikz{\shade [left color=blue ,right color=red]
         (current page.south west) rectangle ++(#1,12pt);}
    Max}
\end{tabular}

\end{document}

话虽如此,颜色的选择让表格看起来非常花哨和不美观。第一个改进是将文本颜色改为白色,我们可以这样做\Heat

\newcommand\Heat[1]{% \Heat{number in the interval [-1,1]}
    \pgfmathparse{int(50+50*#1)}% map number in [-1,1] to [0,100]
    \edef\HeatCell{\noexpand\cellcolor{red!\pgfmathresult!blue}}%
    \HeatCell\textcolor{white}{$#1$}%
}

得出的结果为:

在此处输入图片描述

我们可以将颜色改为Yellow1SpringGreen3(使用x11names选项彩色), 要得到:

在此处输入图片描述

编辑

只是为了好玩,下面是相同的代码,但是鍵盤通过等设置颜色和最小/最大值的界面\Heatset{min colour=blue, max colour=red}。还有一个\Heatset{slider= <width> }渐变条滑块:

\documentclass{article}
\usepackage[table,x11names]{xcolor}
\usepackage{collcell}
\usepackage{array}
\usepackage{tikz}
\usepackage{pgfkeys}

% set up pgfkeys for controlling heat specifications
\pgfkeys{/heat/.is family, /heat,
    min colour/.initial = Yellow1,
    max colour/.initial = SpringGreen3,
    text colour/.initial = black,
    min color/.style = {min colour=#1},% for our friends who can't spell
    max color/.style = {max colour=#1},
    text color/.style = {text colour=#1},
    min/.initial = -1,
    max/.initial = 1,
    slider/.code={%
       \tikz{\shade[left color=\HVal{min colour},%
                    right color=\HVal{max colour}]%
          (current page.south west) rectangle ++(#1,12pt);
       }%
    }%
}
\newcommand\Heatset[1]{\pgfkeys{/heat, #1}}
\newcommand\HVal[1]{\pgfkeysvalueof{/heat/#1}}

\newcolumntype{H}{>{\collectcell\Heat}r<{\endcollectcell}}
\newcommand\Heat[1]{% \Heat{number in the interval [min, max] }
  \pgfmathparse{int(100*(#1-\HVal{min})/(\HVal{max}-\HVal{min}))}% map number to [0,100]
  \edef\HeatCell{\noexpand\cellcolor{\HVal{max colour}!\pgfmathresult!\HVal{min colour}}}%
  \HeatCell\textcolor{\HVal{text colour}}{$#1$}%
}

\begin{document}

\begin{tabular}{ *7H }
-1.0 & -0.9 & -0.8 & -0.7 & -0.6 & -0.5 & -0.4 \\
-0.3 & -0.2 & -0.1 &  0.0 &  0.1 &  0.2 &  0.3 \\
 0.4 &  0.5 &  0.6 &  0.7 &  0.8 &  0.9 &  1.0 \\
 \multicolumn{7}{c}{Min \Heatset{slider=5.5} Max}
\end{tabular}

\bigskip\noindent
\Heatset{max colour=red, min colour=blue, min=0, max=100, text colour=white}
\verb|\Heatset{max colour=red, min colour=blue, min=0, max=100, text colour=white}|
\begin{tabular}{ *7H }
 10 &  90 &  80 &  70 &  60 &  50 &  40 \\
 30 &  20 &  10 &  00 &  10 &  20 &  30 \\
 40 &  50 &  60 &  70 &  80 &  90 &  10 \\
 \multicolumn{7}{c}{Min \Heatset{slider=3.0} Max}
\end{tabular}

\end{document}

得出的结果为:

在此处输入图片描述

相关内容