我看过这个帖子相关表的条件格式解决了我的问题,但是......
有没有更简单的方法(或替代方法)来使用颜色来实现这一点?
谢谢。 ------------------ 显示后编辑,然后显示重复 ------------- 我认为有很多 sols,但是例如使用没有 pgf 的普通表格很容易...
我正在尝试使用相似的颜色来应用到表格概率中
答案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}
}