Coloration conditionnelle tableau

Tout ce qui concerne le langage TeX/LaTeX et ses variantes. Ce langage est utilisable sur le forum via les balises tex.
[participation réservée aux membres inscrits]
Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
marco56
Utilisateur chevronné
Utilisateur chevronné
Messages : 1083
Inscription : jeudi 25 novembre 2010, 22:10

[Résolu] Coloration conditionnelle tableau

Message non lu par marco56 »

Bonjour,
J'ai trouvé un code que j'ai un peu adapté mais il ne me convient pas totalement.
Je souhaiterais des couleurs qui s'étalent entre le vert et le rouge vif, voire brun, en passant par le jaune.
Voici le code :

Code : Tout sélectionner

\documentclass{article}
\usepackage{xcolor}
\usepackage{pgf}
\usepackage{collcell}


% This selects the amount of color to use
\newcommand*{\MinNumber}{0}%
\newcommand*{\MaxNumber}{20}%

\newcommand{\ApplyGradient}[1]{%
\pgfmathsetmacro{\PercentColora}{100*(#1-\MinNumber)/(\MaxNumber-\MinNumber)}
\pgfmathsetmacro{\PercentColorb}{100*(#1)/(\MaxNumber-\MinNumber)}
\colorbox{green!\PercentColora!red!\PercentColorb!}{#1}
}
\newcolumntype{R}{>{\collectcell\ApplyGradient}{r}<{\endcollectcell}}

\begin{document}
\begin{tabular}{|c| R R R | c}
\hline
1  & \multicolumn1r{2} & \multicolumn1r4 & \multicolumn1{c|}6 \\
\hline
2 & 4 & 12 & 7 \\
\hline
3 & 18.2 & 14.6 & 0.5 \\
\hline
4 & 12.4 & 19 & 9.3 \\
\hline
\end{tabular}
\end{document}
Bon week-end à tous et toutes.

[edit] Question subsidiaire :
si je pouvais combiner avec le réglage centré des colonnes et la définition de la largeur, ce serait le top.
Pour l'instant, j'utilisais cela :

Code : Tout sélectionner

\newcolumntype{C}[1]{>{\centering}m{#1}}
\newcolumntype{L}[1]{>{\raggedleft}m{#1}}
un bon petit
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 949
Inscription : vendredi 12 juin 2009, 22:35
Localisation : Chambéry

Re: Coloration conditionnelle tableau

Message non lu par un bon petit »

Code : Tout sélectionner

\documentclass{article}
\usepackage{xcolor,xfp,collcell}
\newcommand*\MinNumber{0}
\newcommand*\MaxNumber{20}
\newcommand*\Largeur{1cm}
\colorlet{vert}[hsb]{green}
\newcommand*\ApplyGradient[1]{%
	\colorbox
		{vert!\fpeval{100*(#1-\MinNumber)/(\MaxNumber-\MinNumber)}!red}
		{\hbox to\Largeur{\hss\vrule width0pt depth.2ex\relax#1\hss}}}
\newcolumntype{R}{>{\collectcell\ApplyGradient}{c}<{\endcollectcell}}

\begin{document}
\begin{tabular}{|c|*3R|c}\hline
	1  & \multicolumn1c2 & \multicolumn1c4 & \multicolumn1{c|}6 \\\hline
	2 & 4 & 12 & 7 \\\hline
	3 & 18.2 & 14.6 & 0.5 \\\hline
	4 & 12.4 & 19 & 9.3 \\\hline
\end{tabular}
\end{document}
Screenshot_20220429_180635.png
marco56
Utilisateur chevronné
Utilisateur chevronné
Messages : 1083
Inscription : jeudi 25 novembre 2010, 22:10

Re: Coloration conditionnelle tableau

Message non lu par marco56 »

Merci !
Je teste cela demain en grandeur nature sur un longtabular.
On peut le faire en version left ou right et avec la largeur réglable ?
Désolé, plus l'heure d'avoir les capacirés cognitives pour étudier cela correctement...
J'imagine que left ou right se gère avec l'option c...
Pour info, je n'ai pas besoin de l'option multicolumn.
Question subsidiaire : pourquoi n'y a-t-il pas un trait vertical entre chaque colonne ?
projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 2035
Inscription : samedi 29 décembre 2007, 00:58

Re: Coloration conditionnelle tableau

Message non lu par projetmbc »

Bonjour.

Le package tabularray est à découvrir.
un bon petit
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 949
Inscription : vendredi 12 juin 2009, 22:35
Localisation : Chambéry

Re: Coloration conditionnelle tableau

Message non lu par un bon petit »

marco56 a écrit : samedi 30 avril 2022, 00:40 On peut le faire en version left ou right et avec la largeur réglable ?
Pas trop compris de quoi il s'agit, mais si c'est pour l'alignement des contenus des colonnes, il suffit de supprimer le bon ressort \hss.
marco56 a écrit : samedi 30 avril 2022, 00:40 J'imagine que left ou right se gère avec l'option c...
Non.
marco56 a écrit : samedi 30 avril 2022, 00:40 Question subsidiaire : pourquoi n'y a-t-il pas un trait vertical entre chaque colonne ?
Réponse évidente.
marco56
Utilisateur chevronné
Utilisateur chevronné
Messages : 1083
Inscription : jeudi 25 novembre 2010, 22:10

Re: Coloration conditionnelle tableau

Message non lu par marco56 »

projetmbc a écrit : samedi 30 avril 2022, 07:32 Bonjour.

Le package tabularray est à découvrir.
Oui, merci, très complet.
Je l'utilise déjà mais je n'y vois pas de coloration conditionnelle.
marco56
Utilisateur chevronné
Utilisateur chevronné
Messages : 1083
Inscription : jeudi 25 novembre 2010, 22:10

Re: Coloration conditionnelle tableau

Message non lu par marco56 »

un bon petit a écrit : samedi 30 avril 2022, 08:44
marco56 a écrit : samedi 30 avril 2022, 00:40 On peut le faire en version left ou right et avec la largeur réglable ?
Pas trop compris de quoi il s'agit, mais si c'est pour l'alignement des contenus des colonnes, il suffit de supprimer le bon ressort \hss.
marco56 a écrit : samedi 30 avril 2022, 00:40 J'imagine que left ou right se gère avec l'option c...
Non.
marco56 a écrit : samedi 30 avril 2022, 00:40 Question subsidiaire : pourquoi n'y a-t-il pas un trait vertical entre chaque colonne ?
Réponse évidente.
Ce dont je voulais parler était l'alignement centré, ou aligné à gauche ou à droite.
J'ai vu ce qui se passait en enlevant un des ressorts : merci, cela répond à ma question.
L'évidence de la réponse à ma dernière question me laisse perplexe : je suis sans doute trop bête car j'ai beau chercher, je ne vois pas. A moins que ce soit en raison du multicolumn ?

Enfin, si on souhaite fixer la largeur d'une colonne, est-ce possible, tout en maintenant les autres desiderata ? Est-ce que la commande suivante suffit :

Code : Tout sélectionner

\newcommand*\Largeur{5mm}
marco56
Utilisateur chevronné
Utilisateur chevronné
Messages : 1083
Inscription : jeudi 25 novembre 2010, 22:10

Re: Coloration conditionnelle tableau

Message non lu par marco56 »

Code : Tout sélectionner

\documentclass{article}
\usepackage{xcolor,xfp,collcell}
\newcommand*\MinNumber{0}
\newcommand*\MaxNumber{20}
\newcommand*\Largeur{5mm}
\colorlet{vert}[hsb]{green}
\newcommand*\ApplyGradient[1]{%
\colorbox
{vert!\fpeval{100*(#1-\MinNumber)/(\MaxNumber-\MinNumber)}!red}
{\hbox to\Largeur{\hss\vrule width0pt depth.2ex\relax#1\hss}}}
\newcolumntype{R}{>{\collectcell\ApplyGradient}{c}<{\endcollectcell}}

\newcommand*\Largeura[1]{#1}
\newcommand*\ApplyGradienta[1]{%
\colorbox
{vert!\fpeval{100*(#1-\MinNumber)/(\MaxNumber-\MinNumber)}!red}
{\hbox to\Largeura{20mm}{\hss\vrule width0pt depth.2ex\relax#1\hss}}}
\newcolumntype{T}{>{\collectcell\ApplyGradienta}{c}<{\endcollectcell}}

\begin{document}
\begin{tabular}{|c|*3R|c}\hline
1  & \multicolumn1c2 & \multicolumn1c4 & \multicolumn1{c|}6 \\
\hline
2 & 4 & 12 & 7 \\
\hline
3 & 18.2 & 14.6 & 0.5 \\
\hline
4 & 12.4 & 19 & 9.3 \\
\hline
\end{tabular}

\vspace*{1cm}
\begin{tabular}{|c|*3T|}\hline
1  & \multicolumn1c {one} & \multicolumn1c {two} & \multicolumn1c {three} \\
\hline
2 & 4 & 12 & 7 \\
\hline
3 & 18.2 & 14.6 & 0.5 \\
\hline
4 & 12.4 & 19 & 9.3 \\
\hline
\end{tabular}

\end{document}
J'essaie de faire des modifs mai je me rends compte que j'ai quelques lacunes avec tabular...
- Je ne comprends pas complètement l'instruction |c|*3T| je crois : pour moi, cela faisait 3 colonnes et non 4.
- Tout d'abord, j'ai des espaces blancs entre les box colorées que je n'arrive pas à enlever
- je n'ai pas mes traits verticaux, ni dans l'entête, ni dans les cases ensuite
un bon petit
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 949
Inscription : vendredi 12 juin 2009, 22:35
Localisation : Chambéry

Re: Coloration conditionnelle tableau

Message non lu par un bon petit »

marco56 a écrit : samedi 30 avril 2022, 13:04 L'évidence de la réponse à ma dernière question me laisse perplexe : je suis sans doute trop bête car j'ai beau chercher, je ne vois pas. A moins que ce soit en raison du multicolumn ?
Il n'y a pas de filet car dans la définition de la colonne, vous n'en mettez pas puisque vous écrivez |c| R R R | c et non pas |c| R| R| R | c
marco56 a écrit : samedi 30 avril 2022, 13:04Je ne comprends pas complètement l'instruction |c|*3T| je crois : pour moi, cela faisait 3 colonnes et non 4.
4 colonnes : une de type c et 3 de type T
marco56 a écrit : samedi 30 avril 2022, 13:04 Tout d'abord, j'ai des espaces blancs entre les box colorées que je n'arrive pas à enlever
Il faut les neutraliser avec @{} !
marco56 a écrit : samedi 30 avril 2022, 13:04 je n'ai pas mes traits verticaux, ni dans l'entête, ni dans les cases ensuite
Voir réponse au-dessus.
De toutes façons, les filets verticaux sont totalement superflus. A fortiori si les cases sont colorées !
marco56 a écrit : samedi 30 avril 2022, 13:04 Enfin, si on souhaite fixer la largeur d'une colonne, est-ce possible, tout en maintenant les autres desiderata ?
Il y a plusieurs façons plus adroites que votre \newcommand*\Largeura[1]{#1} :lol:
Pourquoi pas, pas exemple, définir un type de colonne avec argument ?
marco56 a écrit : samedi 30 avril 2022, 13:04 Pour info, je n'ai pas besoin de l'option multicolumn.
Sauf que vous resservez un ECM avec des \multicolumn !

Bon, voici un essai, voir code ci-dessous.
J'ai corrigé par « un deux trois » la première ligne du tableau, c'est clairement plus adapté que "one two three", non ? C'te mode de l'anglais, décidément :crazy:

Code : Tout sélectionner

\documentclass{article}
\usepackage{xcolor,xfp,collcell}
\newcommand*\MinNumber{0}
\newcommand*\MaxNumber{20}
\colorlet{vert}[hsb]{green}
\newcommand*\ApplyGradient[2]{%
	\colorbox
		{vert!\fpeval{100*(#2-\MinNumber)/(\MaxNumber-\MinNumber)}!red}
		{\hbox to#1{\hss\vrule width0pt depth.2ex\relax#2\hss}}}
\newcolumntype{T}[1]{@{}>{\collectcell{\ApplyGradient{#1}}}{c}<{\endcollectcell}@{}}
\begin{document}
\begin{tabular}{|c|*3{T{2cm}}|}\hline
1  & \multicolumn1c {un} & \multicolumn1c {deux} & \multicolumn1{c|} {trois} \\\hline
2 & 4 & 12 & 7 \\\hline
3 & 18.2 & 14.6 & 0.5 \\\hline
4 & 12.4 & 19 & 9.3 \\\hline
\end{tabular}
\smallbreak
\begin{tabular}{|c|*3{T{1cm}}|}\hline
1  & \multicolumn1c {un} & \multicolumn1c {deux} & \multicolumn1{c|} {trois} \\\hline
2 & 4 & 12 & 7 \\\hline
3 & 18.2 & 14.6 & 0.5 \\\hline
4 & 12.4 & 19 & 9.3 \\\hline
\end{tabular}
\end{document}
marco56
Utilisateur chevronné
Utilisateur chevronné
Messages : 1083
Inscription : jeudi 25 novembre 2010, 22:10

Re: Coloration conditionnelle tableau

Message non lu par marco56 »

Un grand merci pour toutes ces précisions et pour aide précieuse.
J'avais effectivement tenté

Code : Tout sélectionner

\newcommand*\Largeura[1]{#1}
avec ensuite 2 arguments dans la fonction de coloration mais j'avais fait une erreur puisque cela plantait.
un bon petit
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 949
Inscription : vendredi 12 juin 2009, 22:35
Localisation : Chambéry

Re: Coloration conditionnelle tableau

Message non lu par un bon petit »

Tout compte fait, en essayant le truc, je trouve que les filets verticaux sont pas mal et rendent bien :oops:

Code : Tout sélectionner

\documentclass{article}
\usepackage{xcolor,xfp,collcell}
\newcommand*\MinNumber{0}
\newcommand*\MaxNumber{20}
\colorlet{vert}[hsb]{green}
\newcommand*\ApplyGradient[2]{%
	\colorbox
		{vert!\fpeval{100*(#2-\MinNumber)/(\MaxNumber-\MinNumber)}!red}
		{\hbox to#1{\hss\vrule width0pt depth.2ex\relax#2\hss}}}
\newcolumntype{T}[1]{@{}>{\collectcell{\ApplyGradient{#1}}}{c}<{\endcollectcell}@{\vrule}}
\begin{document}
\begin{tabular}{|c|*3{T{2cm}}}\hline
1  & \multicolumn1c {un} & \multicolumn1c {deux} & \multicolumn1{c|} {trois} \\\hline
2 & 4 & 12 & 7 \\\hline
3 & 18.2 & 14.6 & 0.5 \\\hline
4 & 12.4 & 19 & 9.3 \\\hline
\end{tabular}
\smallbreak
\begin{tabular}{|c|*3{T{1cm}}}\hline
1  & \multicolumn1c {un} & \multicolumn1c {deux} & \multicolumn1{c|} {trois} \\\hline
2 & 4 & 12 & 7 \\\hline
3 & 18.2 & 14.6 & 0.5 \\\hline
4 & 12.4 & 19 & 9.3 \\\hline
\end{tabular}
\end{document}
Screenshot_20220430_191138.png
marco56
Utilisateur chevronné
Utilisateur chevronné
Messages : 1083
Inscription : jeudi 25 novembre 2010, 22:10

Re: Coloration conditionnelle tableau

Message non lu par marco56 »

Merci encore.
J'ai une question complémentaire et là, je ne sais pas trop si c'est faisable.
Est-il possible de colorer le texte d'une case n d'une certaine couleur si la première colonne (même ligne) vaut "F" par exemple ?
Ou encore de colorier une case n en fonction de valeur de (case n / case n+1), même ligne encore ?
Je ne veux pas abuser et la solution proposée est parfaite.
un bon petit
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 949
Inscription : vendredi 12 juin 2009, 22:35
Localisation : Chambéry

Re: Coloration conditionnelle tableau

Message non lu par un bon petit »

marco56 a écrit : samedi 30 avril 2022, 19:51 J'ai une question complémentaire
Le contraire m'aurait étonné ! Vous êtes le spécialiste des « questions subsidiaires »...
marco56 a écrit : samedi 30 avril 2022, 19:51 Est-il possible de colorer le texte d'une case n d'une certaine couleur si la première colonne (même ligne) vaut "F" par exemple ?
Oui. Ouvrir un nouveau fil avec ECM. Quelqu'un vous répondra forcément.
marco56 a écrit : samedi 30 avril 2022, 19:51 Ou encore de colorier une case n en fonction de valeur de (case n / case n+1), même ligne encore ?
Case n+1 : beaucoup plus compliqué, car il faut faire 2 passes ou plusieurs compilations. Bref, loin d'être facile ou trivial.
marco56
Utilisateur chevronné
Utilisateur chevronné
Messages : 1083
Inscription : jeudi 25 novembre 2010, 22:10

Re: Coloration conditionnelle tableau

Message non lu par marco56 »

Merci, ces éléments de réponse ne sont pas forcément engageants, ou c'est moi ?
un bon petit
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 949
Inscription : vendredi 12 juin 2009, 22:35
Localisation : Chambéry

Re: Coloration conditionnelle tableau

Message non lu par un bon petit »

marco56 a écrit : samedi 30 avril 2022, 21:31 Merci, ces éléments de réponse ne sont pas forcément engageants, ou c'est moi ?
Colorier en fonction de la 1er case de la ligne : facile si j'ai bien compris. Postez un code qu'on se fasse une idée ! (dans un autre fil)

Colorier une case en fonction de sa suivante : difficile.
marco56
Utilisateur chevronné
Utilisateur chevronné
Messages : 1083
Inscription : jeudi 25 novembre 2010, 22:10

Re: Coloration conditionnelle tableau

Message non lu par marco56 »

Entendu, merci. Bonne soirée.