我正在为一个文档制作混淆矩阵,我想知道 LaTeX 是否有能力处理这个问题。它本质上是一个表格,但背景阴影与表格中的值相对应(阴影可以手动编码)。
如何在 LaTeX 中实现这一点?有可能吗?例如
答案1
构建于奎伯比尔贝尔的答案是collcell
包可用于自动将颜色应用于每个单元格,而无需明确使用宏;一个小例子(特别注意第二个矩阵):
\documentclass{article}
\usepackage[table]{xcolor}
\usepackage{collcell}
\usepackage{hhline}
\usepackage{pgf}
\newcommand\gray{gray}
\newcommand\ColCell[1]{%
\pgfmathparse{#1<.8?1:0}%
\ifnum\pgfmathresult=0\relax\color{white}\fi
\pgfmathparse{1-#1}%
\expandafter\cellcolor\expandafter[%
\expandafter\gray\expandafter]\expandafter{\pgfmathresult}#1}
\newcolumntype{E}{>{\collectcell\ColCell}c<{\endcollectcell}}
\begin{document}
\noindent\begin{tabular}{c*{6}{|E}|}
\multicolumn{1}{c}{} & \multicolumn{1}{c}{hw} & \multicolumn{1}{c}{bx}
& \multicolumn{1}{c}{wk} & \multicolumn{1}{c}{jg} & \multicolumn{1}{c}{cl}
& \multicolumn{1}{c}{rn} \\ \hhline{~*6{|-}|}
ving & 1 & 0 & 0 & 0 & 0 & 0 \\ \hhline{~*6{|-}|}
xing & 0 & 0.92 & 0.08 & 0 & 0 & 0 \\ \hhline{~*6{|-}|}
king & 0 & 0.03 & 0.97 & 0 & 0 & 0 \\ \hhline{~*6{|-}|}
ging & 0 & 0 & 0 & 1 & 0 & 0 \\ \hhline{~*6{|-}|}
ping & 0 & 0 & 0 & 0 & 1 & 0 \\ \hhline{~*6{|-}|}
ning & 0 & 0 & 0 & 0 & 0 & 1 \\ \hhline{~*6{|-}|}
\end{tabular}\par\bigskip
\noindent\begin{tabular}{ *{6}{E}}
0.2 & 0.3 & 0.2 & 0.86 & 0 & 1 \\
0.87 & 0.65 & 0.43 & 0.6 & 1 & 0.3 \\
0.17 & 0.25 & 0.83 & 0.23 & 0.7 & 0.5 \\
0.72 & 0.45 & 1 & 0.5 & 0.43 & 0.85 \\
0.1 & 0.15 & 0 & 0.65 & 0.83 & 0.25 \\
0 & 1 & 0.4 & 0.51 & 0.63 & 0.75 \\
\end{tabular}
\end{document}
答案2
xcolor
用于颜色。
hhline
用于没有被覆盖的水平线\cellcolor
。
pgf
用于计算。
该命令\gray
仅定义以减少 s 的数量\expandafter
。使用
长度以使所有列具有相同的宽度。\tabwidth
代码
\RequirePackage[table]{xcolor}
\documentclass{article}
\usepackage{array,hhline}
\usepackage{pgf}
\newcommand*{\gray}{gray}
\newcommand*{\woB}[1]{\multicolumn{1}{c}{#1}}
\newcommand*{\colorme}[1]{%
\pgfmathparse{#1<.5?1:0}%
\ifnum\pgfmathresult=0\relax\color{white}\fi
\pgfmathparse{1-#1}
\expandafter\cellcolor\expandafter[\expandafter\gray\expandafter]\expandafter{\pgfmathresult}%
#1%
}
\newlength{\tabwidth}
\settowidth{\tabwidth}{0.00}
\begin{document}
\begin{tabular}{l*6{|>{\centering\arraybackslash}m{\tabwidth}}|}
\woB{} & \woB{hw} & \woB{bx} & \woB{wk} & \woB{jg} & \woB{cl} & \woB{rn} \\ \hhline{~*6{|-}|}
ving & \colorme{1} & 0 & 0 & 0 & 0 & 0 \\ \hhline{~*6{|-}|}
xing & 0 & \colorme{0.92} & \colorme{0.08} & 0 & 0 & 0 \\ \hhline{~*6{|-}|}
king & 0 & \colorme{0.03} & \colorme{0.97} & 0 & 0 & 0 \\ \hhline{~*6{|-}|}
ging & 0 & 0 & 0 & \colorme{1} & 0 & 0 \\ \hhline{~*6{|-}|}
ping & 0 & 0 & 0 & 0 & \colorme{1} & 0 \\ \hhline{~*6{|-}|}
ning & 0 & 0 & 0 & 0 & 0 & \colorme{1} \\ \hhline{~*6{|-}|}
\end{tabular}
\end{document}
输出
答案3
这是 Qrrbrbirlbel 的解决方案,无需强大的力量前列腺素。
\documentclass{article}
\usepackage[table]{xcolor}
\usepackage{array,hhline}
\makeatletter
\newcommand*{\ccol}[1]{%
\ifdim#1pt<.5pt\relax\else\color{white}\fi
\edef\x{\noexpand\cellcolor[gray]{\strip@pt\dimexpr1pt-#1pt}}\x
#1%
}
\newlength{\cellwidth}
\settowidth{\cellwidth}{0.00}
\def\jline{\\\hhline{~*6{|-}|}}
\makeatother
\begin{document}
\begin{tabular}{l*6{|>{\centering\arraybackslash}m{\cellwidth}}|}
\noalign{\gdef\w#1{\multicolumn{1}{c}{#1}}}
\w{} & \w{hw} & \w{bx} & \w{wk} & \w{jg} & \w{cl} & \w{rn}\jline
ving & \ccol{1} & 0 & 0 & 0 & 0 & 0\jline
xing & 0 & \ccol{0.92} & \ccol{0.08} & 0 & 0 & 0 \jline
king & 0 & \ccol{0.03} & \ccol{0.97} & 0 & 0 & 0\jline
ging & 0 & 0 & 0 & \ccol{1} & 0 & 0\jline
ping & 0 & 0 & 0 & 0 & \ccol{1} & 0\jline
ning & 0 & 0 & 0 & 0 & 0 & \ccol{1}\jline
\noalign{\global\let\w\undefined}
\end{tabular}
\end{document}