是否可以绘制一个 n x n 的网格,每个单元格都有文本,并且每个单元格都有不同的背景阴影/颜色?(混淆矩阵)

是否可以绘制一个 n x n 的网格,每个单元格都有文本,并且每个单元格都有不同的背景阴影/颜色?(混淆矩阵)

我正在为一个文档制作混淆矩阵,我想知道 LaTeX 是否有能力处理这个问题。它本质上是一个表格,但背景阴影与表格中的值相对应(阴影可以手动编码)。

如何在 LaTeX 中实现这一点?有可能吗?例如https://i.stack.imgur.com/mLxlO.png

答案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}

相关内容