我想根据表格中的值对其进行一些阴影处理。例如,如果您看到下表:
a b c d
a 90 10 0 0
b 0 80 10 10
c 0 0 95 5
d 0 10 5 85
我想根据数值自动为每个数字单元格添加黑色和白色混合阴影。也就是说,(a,a) = 90
应该是black!90
,并且(c,d) = 5
应该是black!5
。此外,如果您可以参数化着色操作,以便可以定义颜色,并且如果我们使用值或补码,那就太好了。
我在想通过文件中的数据参数绘制不同的 tikz 形状,但我不明白如何在表格中实现这一点。
您能给我一些关于如何实现这种自动造型的建议吗?
答案1
您可以使用 pgfplotstable 和xcolor
带有[table]
选项的包,它会为您提供\cellcolor
命令。
这是一种新样式,\pgfplotstabletypeset
它根据单元格的值将单元格着色为不同的灰色,如果背景黑色超过 50%,则以白色打印该值。
命令
\pgfplotstabletypeset[color cells]{
x,a,b,c,d % The first column needs a name
a,90,10,0,0
b,0,80,10,10
c,0,0,95,5
d,0,10,5,85
}
然后会给你(此处显示并带有标题)
\documentclass{article}
\usepackage[table]{xcolor}
\usepackage{pgfplotstable}
\pgfplotstableset{
color cells/.style={
col sep=comma,
string type,
postproc cell content/.code={%
\pgfkeysalso{@cell content=\rule{0cm}{2.4ex}\cellcolor{black!##1}\pgfmathtruncatemacro\number{##1}\ifnum\number>50\color{white}\fi##1}%
},
columns/x/.style={
column name={},
postproc cell content/.code={}
}
}
}
\begin{document}
\begin{table}\caption{Correlation or something}
\centering
\pgfplotstabletypeset[color cells]{
x,a,b,c,d
a,90,10.5,0,0
b,0,80,10,10
c,0,0,95,5
d,0,10,5,85
}
\end{table}
\end{document}
答案2
我想保留表格的使用,所以我使用宏来格式化单元格。这对我来说肯定更长,但更熟悉。
\def\cca#1{\cellcolor{black!#10}\ifnum #1>5\color{white}\fi{#1}}
%For ranges 0-10, multiply by 10 by adding 0 after #1
\begin{table}[!t]
\caption{Table Caption}
\label{tab1}
\centering
{\setlength\tabcolsep{0.1pt}%
\begin{tabular}{ccccccccccccccc}
& $D_1$ & $D_2$ & $D_3$ & $D_4$ & $D_5$ & $D_6$ && & $D_1$ & $D_2$ & $D_3$ & $D_4$ & $D_5$ & $D_6$ \\
$D_1$ & & \cca{0} & \cca{0} & \cca{0} & \cca{2} & \cca{0} && $D_1$ && \cca{0} & \cca{0} & \cca{2} & \cca{2} & \cca{2} \\
$D_2$ & \cca{0} & & \cca{2} & \cca{0} & \cca{2} & \cca{0} && $D_2$ & \cca{0} & & \cca{3} & \cca{0} & \cca{0} & \cca{2} \\
$D_3$ & \cca{7} & \cca{4} & & \cca{3} & \cca{0} & \cca{4} && $D_3$ & \cca{0} & \cca{4} & & \cca{4} & \cca{2} & \cca{0} \\
$D_4$ & \cca{3} & \cca{0} & \cca{7} & & \cca{4} & \cca{0} && $D_4$ & \cca{0} & \cca{0} & \cca{5} & & \cca{0} & \cca{0} \\
$D_5$ & \cca{3} & \cca{7} & \cca{7} & \cca{2} & & \cca{4} && $D_5$ & \cca{2} & \cca{2} & \cca{0} & \cca{4} & & \cca{4} \\
$D_6$ & \cca{2} & \cca{2} & \cca{7} & \cca{2} & \cca{6} & && $D_6$ & \cca{2} & \cca{2} & \cca{3} & \cca{0} & \cca{4} & \\
\end{tabular}}
\end{table}
答案3
如果您希望单元格背景颜色根据其值而改变。
您可以使用以下代码。
\documentclass[english]{article}
\usepackage[T1]{fontenc}
\usepackage[latin9]{inputenc}
\usepackage{babel}
\usepackage[table]{xcolor}
\usepackage{collcell}
\usepackage{hhline}
\usepackage{pgf}
\usepackage{multirow}
\def\colorModel{hsb} %You can use rgb or hsb
\newcommand\ColCell[1]{
\pgfmathparse{#1<50?1:0} %Threshold for changing the font color into the cells
\ifnum\pgfmathresult=0\relax\color{white}\fi
\pgfmathsetmacro\compA{0} %Component R or H
\pgfmathsetmacro\compB{#1/100} %Component G or S
\pgfmathsetmacro\compC{1} %Component B or B
\edef\x{\noexpand\centering\noexpand\cellcolor[\colorModel]{\compA,\compB,\compC}}\x #1
}
\newcolumntype{E}{>{\collectcell\ColCell}m{0.4cm}<{\endcollectcell}} %Cell width
\begin{document}
\newcommand\items{3} %Number of classes
\arrayrulecolor{white} %Table line colors
\noindent\begin{tabular}{c*{\items}{|E}|}
\multicolumn{1}{c}{} &
\multicolumn{1}{c}{A} &
\multicolumn{1}{c}{B} &
\multicolumn{1}{c}{C} \\ \hhline{~*\items{|-}|}
A & 100 & 0 & 10 \\ \hhline{~*\items{|-}|}
B & 10 & 80 & 10 \\ \hhline{~*\items{|-}|}
C & 30 & 0 & 70 \\ \hhline{~*\items{|-}|}
\end{tabular}
\end{document}
您可以使用 RGB 或 HSB 来定义您的颜色范围,并且可以使用 compA、compB 和 compC 中的公式来控制颜色范围。
因此,对于“秋天”(红黄色)范围使用:
\pgfmathsetmacro\compA{#1/600} %Component R or H
\pgfmathsetmacro\compB{1} %Component G or S
\pgfmathsetmacro\compC{1} %Component B or B
并且,对于“冷色”(青色 - 洋红色)范围,设置 rgb 作为颜色模型并使用:
\pgfmathsetmacro\compA{#1/100} %Component R or H
\pgfmathsetmacro\compB{1-#1/100} %Component G or S
\pgfmathsetmacro\compC{1} %Component B or B
对于“黑红”范围使用:
\pgfmathsetmacro\compA{0} %Component R or H
\pgfmathsetmacro\compB{1} %Component G or S
\pgfmathsetmacro\compC{#1/100} %Component B or B
对于“Jet”系列使用:
\pgfmathsetmacro\compA{0.6666-#1/150} %Component R or H
\pgfmathsetmacro\compB{1} %Component G or S
\pgfmathsetmacro\compC{1} %Component B or B
对于“Cooper”系列使用:
\pgfmathsetmacro\compA{0.08+#1/5000} %Component R or H
\pgfmathsetmacro\compB{0.7} %Component G or S
\pgfmathsetmacro\compC{#1/100} %Component B or B
对于“灰色”范围使用:
\pgfmathsetmacro\compA{0} %Component R or H
\pgfmathsetmacro\compB{0} %Component G or S
\pgfmathsetmacro\compC{#1/100} %Component B or B
答案4
我使用@Unas 答案并进行以下调整以自定义范围,在本例中为 93.6 到 97.2:
\def\cca#1{%
\pgfmathsetmacro\calc{(#1-93.6)*100/(97.2-93.6)}%
\edef\clrmacro{\noexpand\cellcolor{blue!\calc}}%
\clrmacro%
\ifdim \calc pt>50pt\color{white}\fi{#1}%
}
\edef
而不是简单拥有的原因\cellcolor{blue!\calc}
是,否则该\calc
部分不会扩大。
还请注意%
每行末尾的。这可以防止单元格中出现空格