Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

GeoDataDays 2025

#1 Thu 15 May 2025 14:19

Sofia2025
Juste Inscrit !
Date d'inscription: 15 May 2025
Messages: 6

QGIS/Etiquettes: attribuer une couleur par valeur (plusieurs champs)

Bonjour
Je suis novice sur QGIS et je ne maitrise pas ni pyhton ni HTML.

Mon jeu de données : champs A B C et D avec les données numeriques simples par point (valeurs de 0 a 9)

Dans l'ideal il me faudra :
- afficher une etiquette avec plusieurs champs des données prises en compte (sucsess avec "A" ||  'n'  ||  "B"  || 'n'  ||   "C"  || 'n'  ||   "D" )
- dans cette etiquette singuliere afficher la couleur du texte correspondant a chaque valeur (par exemple si etiquette affiche "1509" /A=1;B=5;C=0;D=9/
il faut que le chiffre 1 s'affiche toujours en VERT, 5 en JAUNE, 0 en GRIS et 9 en BLEU)

J'arrive a afficher les valeurs colorés correctement avec l'assistant de couleur de texte. Par contre cette option me permet pas d'afficher plusieurs champs des données.

Dans l'ensemble de mon fichier association valeur = couleur est constante :
0 = gris
1,2,3 = vert
4,5 = jaune
6,7 = orange
9 = bleu
(8 n'existe pas c'est normal)

Pour le moment j'essaie de fabriquer un code type :
Je ne sais pas comment identifier un "valeur" ou "nombre" sans s'accrocher chaque fois a un champs

Code:

CASE 
WHEN 'n' = '1' THEN color_cmyk(60,20,100,0)
WHEN 'n' = '2' THEN color_cmyk(60,20,100,0)
WHEN 'n' = '3' THEN color_cmyk(60,20,100,0)
WHEN 'n' = '4' THEN color_cmyk(0,0,100,0)
WHEN 'n' = '5' THEN color_cmyk(0,0,100,0)
WHEN 'n' = '6' THEN color_cmyk(0,50,100,0)
WHEN 'n' = '7' THEN color_cmyk(0,50,100,0)
WHEN 'n' = '9' THEN color_cmyk(100,40,0,0)
ELSE color_cmyk(0,0,0,50)
END

Dernière modification par Sofia2025 (Thu 15 May 2025 14:58)

Hors ligne

 

#2 Thu 15 May 2025 16:39

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 4097

Re: QGIS/Etiquettes: attribuer une couleur par valeur (plusieurs champs)

Bonjour,
Pas besoin de Python, juste un peu de HTML. Et surtout de la curiosité pour comprendre la solution proposée et les fonctions utilisées.
Il faudra utiliser l'option "Autoriser le formatage HTML" des options d'étiquette et savoir que la balise color ne prend en valeur que le nom de la couleur ou sous sa forme #RRGGBB (info dans le lien Qt dans la doc).
La complexité dans votre demande réside dans ce que la couleur va dépendre du texte affiché. Il faut donc découper le texte en question afin de savoir quelle couleur appliquer, et c'est là que les fonctions de liste sont d'une grande aide.

Code:

array_to_string( -- dernière étape, on rebascule le tout en texte pour affichage
 with_variable(
  'monetiquetteenliste',
  array(A, B, C, D), --on crée notre liste de données à afficher
  array_foreach( -- et on va parcourir cette liste
   @monetiquetteenliste,
   with_variable(
    'macouleur', -- et définir pour chaque valeur de cette liste, la couleur correspondante
    CASE
     WHEN @element in ('1', '2','3') THEN 'grey'
     WHEN @element in ('4', '5') THEN 'yellow'
     WHEN @element in ('6', 7) THEN 'orange'
     WHEN @element = '9' THEN 'blue'
     ELSE 'black'
    END,
    format('<p style="color:%1">%2</p>', @macouleur, @element ) -- et appliquer le formatage adéquat au texte pris "individuellement", en mode paragraphe
   )
  )
 ), delimiter:='' -- nécessaire pour enlever la virgule de séparation par défaut de la fonction
)

Hors ligne

 

#3 Thu 15 May 2025 18:47

Sofia2025
Juste Inscrit !
Date d'inscription: 15 May 2025
Messages: 6

Re: QGIS/Etiquettes: attribuer une couleur par valeur (plusieurs champs)

Bonjour @Santanna
Je vous remercie pour votre travail ainsi que votre approche pedagogique.
Pour le moment par le manque de competences je n'arrive pas a faire votre code marcher.
Pouvez-vous m'expliquer si je dois remplacer @element par @monetiquetteenliste ou autre chose ? J'ai essayé de mettre et enlever les virgules mais sans resultat.
J'ai l'impression il y a des soucis au niveau de CASE WHEN mais apres avoir essayé tout ce que je peux imaginer je n'arrive pas de comprendre ce qui va pas. Je m'xcuse pour le derangement et je vous remercie pour votre aide.

Pour le moment voici le code :

Code:

array_to_string(
 with_variable(
  'monetiquetteenliste',
  array( "07/05",  "16/06" ,  "20/09" ,  "14/10" ,  "21/11" ,  "30/12" ),
  array_foreach(
   @monetiquetteenliste,
   with_variable(
    'macouleur',
    CASE
     WHEN @element in('1', '2','3') THEN 'green'
     WHEN @element in('4', '5') THEN 'yellow'
     WHEN @element in('6', '7') THEN 'orange'
     WHEN @element = '9' THEN 'blue'
     ELSE 'grey'
    END,
    format('<p style="color:%1">%2</p>', @macouleur, @element )
   )
  )
), delimiter:=''
)

Ce que je trouve surprennat c'est le fait que dans la previsualisation du constructeur d'expression ça fonctionne. Par contre quand je l'applique au style d'etiquette rien se produise

Dernière modification par Sofia2025 (Thu 15 May 2025 19:20)

Hors ligne

 

#4 Thu 15 May 2025 19:08

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 4097

Re: QGIS/Etiquettes: attribuer une couleur par valeur (plusieurs champs)

Désolé, j'ai oublié de signaler que cette expression est à mettre dans le champ valeur de l'onglet "Etiquettes", là où on sélectionne généralement le champ qu'on veut afficher en étiquette.

Autrement, il n'y a rien d’erroné dans votre code qui me saute aux yeux et non, il n'y a rien d'autre à remplacer. seulement vos champs et les couleurs.
QGIS renvoie un message d'erreur ou un résultat particulier?
Un exemple de ce que renvoie cette expression? (un clic droit sur le résultat en prévisualisation en bas permet de copier)

Code:

array("07/05", "16/06", "20/09", "14/10", "30/12")

Hors ligne

 

#5 Thu 15 May 2025 19:24

Sofia2025
Juste Inscrit !
Date d'inscription: 15 May 2025
Messages: 6

Re: QGIS/Etiquettes: attribuer une couleur par valeur (plusieurs champs)

SANTANNA a écrit:

Désolé, j'ai oublié de signaler que cette expression est à mettre dans le champ valeur de l'onglet "Etiquettes", là où on sélectionne généralement le champ qu'on veut afficher en étiquette.

Autrement, il n'y a rien d’erroné dans votre code qui me saute aux yeux et non, il n'y a rien d'autre à remplacer. seulement vos champs et les couleurs.
QGIS renvoie un message d'erreur ou un résultat particulier?
Un exemple de ce que renvoie cette expression? (un clic droit sur le résultat en prévisualisation en bas permet de copier)

Code:

array("07/05", "16/06", "20/09", "14/10", "30/12")


D'accord !! Je ne pensais pas que c'etait a mettre dans les valeurs !!! J'ai essayé de la mettre dans la couleur....
Maintenant ça marche parfaitement. Non seulement que c'est un excellent resultat qui me servira mais aussi j'au beaucoup appris en cherchant ce qui va pas !! je vous remercie!!!!

Hors ligne

 

#6 Fri 16 May 2025 09:21

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 4097

Re: QGIS/Etiquettes: attribuer une couleur par valeur (plusieurs champs)

D'accord !! Je ne pensais pas que c'etait a mettre dans les valeurs !!! J'ai essayé de la mettre dans la couleur....


Oui, je m'en suis douté.

Maintenant ça marche parfaitement. Non seulement que c'est un excellent resultat qui me servira mais aussi j'au beaucoup appris en cherchant ce qui va pas !! je vous remercie!!!!


Super nouvelle. De rien. Et le challenge était intéressant big_smile.

Hors ligne

 

#7 Fri 16 May 2025 13:18

p.jeremie
Participant assidu
Lieu: Valence
Date d'inscription: 10 Sep 2017
Messages: 454

Re: QGIS/Etiquettes: attribuer une couleur par valeur (plusieurs champs)

Bravo @SANTANNA c'est une belle réalisation.
Si besoin d'avoir le texte horizontal plutôt que vertical, possibilité de remplacer le <p> pas un <span> dans le format :

Code:

format('<span style="color:%1">%2</span>', @macouleur, @element )

Hors ligne

 

#8 Fri 16 May 2025 14:41

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 4097

Re: QGIS/Etiquettes: attribuer une couleur par valeur (plusieurs champs)

Merci Jérémie. J'avais essayé avec le span mais le delimiter pour faire le saut de ligne ne voulait rien entendre, d'où le choix de partir directement en <p>.

Hors ligne

 

#9 Fri 16 May 2025 14:55

p.jeremie
Participant assidu
Lieu: Valence
Date d'inscription: 10 Sep 2017
Messages: 454

Re: QGIS/Etiquettes: attribuer une couleur par valeur (plusieurs champs)

Pour être précis, quand j'ai lu le message d'origine, je visualisais les chiffres à la suite, sur une seule ligne et sans saut de ligne.
Du coup j'ai testé avec le <span> et ça répond à cette représentation que je me faisais.
J'ai donc partagé au cas où une autre personne chercherait cette possibilité à l'avenir.

Hors ligne

 

#10 Fri 16 May 2025 15:56

Sofia2025
Juste Inscrit !
Date d'inscription: 15 May 2025
Messages: 6

Re: QGIS/Etiquettes: attribuer une couleur par valeur (plusieurs champs)

Bonjour Santanna, Jeremie
Merci pour cette addition tres precieuse ! Santanna a eu raison dans le formattage, c'etait parfait.
Je reviens vers vous avec une question rapide :
En me rebondissant de votre code magnifique j'ai fabriqué une version en plus pour automatiquement generer la mediane des nos champs et la colorier :

Code:

 array_to_string( 
 with_variable(
  'monetiquetteenliste',
  array_median(array(  "07/05" , "14/05" , "20/12" , "13/07" )),
  array(
   @monetiquetteenliste,
   with_variable(
    'macouleur',
    CASE
     WHEN @element >= '1' <= '3' THEN '#00b800'
     WHEN @element >= '4' <= '5' THEN '#ffff00'
     WHEN @element >= '6' <= '7' THEN '#ff9900'
     WHEN @element = '9' THEN '#0099ff'
     ELSE '#999699'
    END,
    format('<p style="color:%1">%2</p>', @macouleur, @element )
   )
  )
), delimiter:='' 
)

Array fonctionne et je visualise les chiffres correctes par contre j'arrive pas a formuler le CASE WHEN pour colorer mes les decimales. J'ai un peu testé plusieurs versions mais j'arrive pas a voir ou est le coucis.
J'ai meme essaye de separer et mettre les Array dans la valeur et a la place de CASE WHEN utiliser l'assitant de couleur pour faire une degradé. Je pense c'etait pas une solution stable
UPD: finalement la solution de separer et mettre array_median(array dans value et attribuer la couleur avec l'assitant fonctionne pour moi !
J'ai aussi essayé BETWEEN AND (sans sucess)
Pas d'urgence nu d'obligation mais je garde mon message au cas au si cette enigme intereserra qqn smile

Dernière modification par Sofia2025 (Fri 16 May 2025 18:33)

Hors ligne

 

#11 Fri 16 May 2025 18:36

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 4097

Re: QGIS/Etiquettes: attribuer une couleur par valeur (plusieurs champs)

@Sofia2025 Je n'ai pas bien compris ce que vous essayez de faire: représenter juste la médiane, ou la médiane en plus des autres valeurs?

Sofia2025 a écrit:

Array fonctionne et je visualise les chiffres correctes


Ils ressemblent à des chiffres mais ce ne sont pas des chiffres, plutôt du texte. Et array_median prend des valeurs numériques. Il vous faudrait to_int chacun de vos champs dans le array pour avoir une valeur à comparer à d'autres chiffres.

Hors ligne

 

#12 Fri 16 May 2025 18:49

Sofia2025
Juste Inscrit !
Date d'inscription: 15 May 2025
Messages: 6

Re: QGIS/Etiquettes: attribuer une couleur par valeur (plusieurs champs)

SANTANNA a écrit:

@Sofia2025 Je n'ai pas bien compris ce que vous essayez de faire: représenter juste la médiane, ou la médiane en plus des autres valeurs?

Sofia2025 a écrit:

Array fonctionne et je visualise les chiffres correctes


Ils ressemblent à des chiffres mais ce ne sont pas des chiffres, plutôt du texte. Et array_median prend des valeurs numériques. Il vous faudrait to_int chacun de vos champs dans le array pour avoir une valeur à comparer à d'autres chiffres.


Bonsoir Santanna
Juste la mediane et l'afficher avec memes couleurs que dans l'exercise precedant. Le format de mes champs est 123, donc il me semble bien numerique. Array_median a bien fonctionné dans mon jeux de données

J'ai fait tout simple dans les valeurs :

Code:

array_median(
array( "07/05",  "16/06" ,  "20/09" ,  "14/10" ,  "21/11" ,  "30/12"
)
)

Et meme code pour la source d'assistant de couleur.
En resultat j'affiche la mediane des données que je veux avec les couleurs correspondants que j'ai attribué avec un degradé cutomisé.
C'este defintivement pas la solution la plus elegante !


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#13 Fri 16 May 2025 23:15

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 4097

Re: QGIS/Etiquettes: attribuer une couleur par valeur (plusieurs champs)

Juste la mediane et l'afficher avec memes couleurs que dans l'exercise precedant.


OK!

Le format de mes champs est 123, donc il me semble bien numerique


En effet ça l'est donc. Dans les premiers messages, vous placiez vos chiffres entre guillemets simples qui est le formatage pour du texte, donc j'en ai déduit que vous stockiez du texte.

En resultat j'affiche la mediane des données que je veux avec les couleurs correspondants que j'ai attribué avec un degradé cutomisé.
C'este defintivement pas la solution la plus elegante !


Il n'y a pas qu'une seule solution mais la vôtre fonctionne, est simple, maîtrisée et compréhensible, je vois pas ce qu'il faut de plus pour considérer que c'est élégant. Bravo!

Hors ligne

 

#14 Sun 18 May 2025 12:01

Sofia2025
Juste Inscrit !
Date d'inscription: 15 May 2025
Messages: 6

Re: QGIS/Etiquettes: attribuer une couleur par valeur (plusieurs champs)

SANTANNA a écrit:

Juste la mediane et l'afficher avec memes couleurs que dans l'exercise precedant.


OK!

Le format de mes champs est 123, donc il me semble bien numerique


En effet ça l'est donc. Dans les premiers messages, vous placiez vos chiffres entre guillemets simples qui est le formatage pour du texte, donc j'en ai déduit que vous stockiez du texte.

En resultat j'affiche la mediane des données que je veux avec les couleurs correspondants que j'ai attribué avec un degradé cutomisé.
C'este defintivement pas la solution la plus elegante !


Il n'y a pas qu'une seule solution mais la vôtre fonctionne, est simple, maîtrisée et compréhensible, je vois pas ce qu'il faut de plus pour considérer que c'est élégant. Bravo!


Merci beaucoup Santanna, grace a votre soutien je suis tres inspirée d'explorer le codage sur qgis et d'aller plus loin. Bon week end ! smile

Hors ligne

 

Pied de page des forums

Copyright Association GeoRezo