Erstellen einer Heatmap mithilfe von Berechnungen und einer tabellarischen Umgebung

Erstellen einer Heatmap mithilfe von Berechnungen und einer tabellarischen Umgebung

Ich weiß, dass es PGF gibt und viele Leute verwenden es, um Heatmaps zu erstellen. Ich darf dieses Paket jedoch nicht verwenden. Ich möchte daher einen Befehl erstellen, mit dem ich die verschiedenen Zellen einfärben kann.

ich habe das gefundenFrage, die folgendes zeigtedef

\def\cca#1{\cellcolor{black!#10}\ifnum #1>5\color{white}\fi{#1}}

Aber gemäß seinen Kommentaren und meinen Tests funktioniert es nur von 0-9.

Ich wollte etwas Allgemeineres erstellen, etwa diesen Pseudocode:

\newcommand{\cTab}[2]
{
    \res = #1/#2 %maybe using FP (?)
    \eighty = 0.8*#2 %maybe using FP (?)

    \cellcolor{black!\res} 
    \ifnum #1>\eighty 
       \color{white}
    \fi{#1}
}

Es geht also grundsätzlich darum, eine Zahl zu berechnen und diese dann zur Definition von Farbe und anderem wiederzuverwenden?

cellcolorIch kann die Zahl mit FP berechnen, aber nicht innerhalb von oder wiederverwenden ifnum.

MWE

\documentclass[letterpaper, 10 pt]{article}

% Color
\usepackage{xcolor,colortbl}%

\begin{document}
\begin{table}[!ht]
\centering
\caption{True data classification.}
\label{tab:CollectedErrors}
\begin{tabular}{|p{1.5cm}|p{0.5cm}|}
\hline
\textbf{Exposure}& \textbf{Attribute} \\ \hline

  4 & 2 \\ \hline
   11 &144 \\ \hline 
\end{tabular}
\end{table}
\end{document}

Im Grunde möchte ich eine Heatmap erstellen, also Zellen auf Grundlage der Zahl innerhalb der Zelle in der Tabelle einfärben.

MWE verwendet Code aus Lösung 1

\documentclass[letterpaper, 10 pt]{article}

% Color
\usepackage{xcolor,colortbl}%
\usepackage{xintexpr}

\newcommand{\cTab}[2]
{%
    \edef\res    {\xinttheiexpr [2] #1/#2\relax}% [2] = "two digits after ."
    \edef\eighty {\xinttheiexpr [2] 0.8*#2\relax}%
    \cellcolor{black!\res}%
    \xintifboolexpr {#1>\eighty}
        % yes branch 
           {\color{white}}
        % no branch (nothing to do)
           {}% 
    {#1}%
}%

\begin{document}
\begin{table}[!ht]
\centering
\caption{True data classification.}
\label{tab:CollectedErrors}
\begin{tabular}{|p{1.5cm}|p{0.5cm}|}
\hline
\textbf{Exposure}& \textbf{Attribute} \\ \hline

  \cTab{4}{4} & 2 \\ \hline %example, could also be \cTab{4}{144}, in theory all cells should be changed to cTab
   11 &144 \\ \hline 
\end{tabular}
\end{table}
\end{document}

Antwort1

Du könntest es versuchen

\usepackage{xintexpr}

\newcommand{\cTab}[2]
{%
    \edef\res    {\xinttheiexpr [2] #1/#2\relax}% [2] = "two digits after ."
    \edef\eighty {\xinttheiexpr [2] 0.8*#2\relax}%
    \cellcolor{black!\res}%
    \xintifboolexpr {#1>\eighty}
    % yes branch 
       {\color{white}}
    % no branch (nothing to do)
       {}% 
    {#1}%
}%

Aber ein MWE würde helfen. Ok, MWE hat gezeigt, dass ich es brauche, \xdef\resaber ich bin ziemlich im Dunkeln, was das Ziel ist. Update zur Erklärung, jetzt verstehe ich es besser ... (Ich war verwirrt über die xcolorFarbspezifikation mit einem, !da ich glauben gemacht wurde, dass eine Zahl zwischen 0 und 1 erforderlich ist, während ein Prozentsatz zwischen 0 und 100 verlangt wird).

Aktualisiert, um das Definieren von Makros zu vermeiden \resund \eighty(war besonders \resärgerlich, da es einen globalen Bereich benötigte; aber wir können hier die Erweiterbarkeit nutzen \xinttheiexpr).

\documentclass[letterpaper, 10 pt]{article}

% Color
\usepackage{xcolor,colortbl}

% Fine stuff
\usepackage{xintexpr, xinttools}

\newcommand{\cTab}[2]% #1 = cell, #2 = max
{%
    \cellcolor{black!\xinttheiexpr 100*#1/#2\relax}%
    \xintifboolexpr {#1>0.8*#2}%
    % "yes" branch 
       {\textcolor{blue}{#1}}% when #1 is big, print it blue
    % "no" branch
       {#1}% 
}%

\begin{document}
\begin{table}[!ht]
\centering
\caption{True data classification.}
\label{tab:CollectedErrors}
\smallskip
\begin{tabular}{|p{1.5cm}|c|}
\hline
\textbf{Exposure}& \textbf{Attribute} \\ \hline
\xintFor* #1 in {\xintSeq[3]{1}{100}}\do
{%
  \cTab{#1}{100} & \cTab{\the\numexpr100-#1\relax}{100}\\
}
\hline 
\end{tabular}
\end{table}
\end{document}

Beachten Sie auch die Verwendung von \textcolor.

Blockquote

verwandte Informationen