Légende dégradé de couleur sur image()

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Thomas Thélémaque
Messages : 8
Enregistré le : 24 Avr 2019, 09:00

Légende dégradé de couleur sur image()

Messagepar Thomas Thélémaque » 29 Avr 2019, 06:26

Bonjour,
J'ai représenté grâce à la fonction image() un graphe de densité dans lequel sont représentées des étoiles de notre galaxie.
Image
J'aimerai à présent y ajouter une échelle, afin qu'on puisse comprendre quels niveaux de couleur correspondent à combien d'étoile.
SI quelqu'un saurait comment faire, je suis preneur ! Je précise que je suis novice en R, je m'y suis mit il y à deux semaine :)
Merci, Thomas.

Eric Casellas
Messages : 767
Enregistré le : 06 Jan 2009, 14:59

Re: Légende dégradé de couleur sur image()

Messagepar Eric Casellas » 29 Avr 2019, 07:10

Bonjour,

Il y a une fonction image.plot dans le paquet fields qui pourrait faire ce que tu veux je pense.

Eric
Eric

Thomas Thélémaque
Messages : 8
Enregistré le : 24 Avr 2019, 09:00

Re: Légende dégradé de couleur sur image()

Messagepar Thomas Thélémaque » 29 Avr 2019, 07:28

Bonjour Eric et merci pour ta réponse,
J'ai essayé de trouver l'URL du paquet fields pour l'installer sur mon logiciel R, mais en vain... N'aurais-tu pas ça sous la main par hasard ?
Merci, Thomas

Thomas Thélémaque
Messages : 8
Enregistré le : 24 Avr 2019, 09:00

Re: Légende dégradé de couleur sur image()

Messagepar Thomas Thélémaque » 29 Avr 2019, 07:30

C'est bon j'ai trouvé ! :D

Thomas Thélémaque
Messages : 8
Enregistré le : 24 Avr 2019, 09:00

Re: Légende dégradé de couleur sur image()

Messagepar Thomas Thélémaque » 29 Avr 2019, 08:57

Re-bonjour,

Grâce à la fonction image.plot(), j'ai pu rajouter une légende à mon image, avec les arguments par défauts suivants :
add = FALSE, nlevel = 64, legend.shrink = 0.9, legend.width = 1.2, legend.mar = NULL, graphics.reset = TRUE, horizontal = FALSE, bigplot = NULL , smallplot = NULL, legend.only = FALSE,lab.breaks=NULL, axis.args=NULL)

Je fais maintenant face à un nouveau problème, les valeurs présentes dans ma légende :
Image
Alors que je suis censé avoir environ 1500 étoiles représentées dans mon graphique, les valeurs de ma légende ne correspondent pas du tout...
Une idée ?

Merci, Thomas.

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Légende dégradé de couleur sur image()

Messagepar Logez Maxime » 29 Avr 2019, 10:14

Bonjour,

les valeurs représentées sont probablement des densités. Par conséquent ces valeurs sont calculées ici pour chaque "pixel", pour chaque cellule qui constitue ton graph, et ces valeurs vont donc dépendre de la surface de tes cellules et donc des échelles de valeurs de tes variables en ordonnée et en abscisse.
Par exemple :

Code : Tout sélectionner

library(MASS)
m1 <- mvrnorm(1000, c(0,0), diag(c(2,3)))
k1 <- kde2d(m1[,1], m1[,2])
sum(diff(k1$x)[1]*diff(k1$y)[1]*k1$z)
[1] 0.9975903

m2 <- m1/100
k2 <- kde2d(m2[,1], m2[,2])
 sum(diff(k2$x)[1]*diff(k2$y)[1]*k2$z)
[1] 0.9975903

fields:::image.plot(k1)
dev.new()
fields:::image.plot(k2)
Ici tu obtiens les mêmes "images" avec ces deux matrices, pour autant les valeurs sur l'échelles sont très différentes avec des densités qui sont beaucoup plus fortes pour la deuxième matrice, parce que les échelles des variables sont très différentes (facteur 1/100) entre les deux matrices.

Donc il ne faut pas trop que tu cherches à avoir des valeurs qui correspondent aux effectifs, il faut juste se fier au gradient de valeurs fourni par les couleurs.

Cordialement,
Maxime

Thomas Thélémaque
Messages : 8
Enregistré le : 24 Avr 2019, 09:00

Re: Légende dégradé de couleur sur image()

Messagepar Thomas Thélémaque » 29 Avr 2019, 10:26

Bonjour Maxime,

Il n'y a donc aucun moyen d'obtenir des effectifs liés aux couleurs ?

Merci, Thomas.

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Légende dégradé de couleur sur image()

Messagepar Logez Maxime » 29 Avr 2019, 10:32

Si en catégorisant tes variables avec la fonction cut par exemple, puis en calculant la matrice de contingence (le tableau croisé dynamique) pour avoir pour chaque "celulle" les effectifs et en se servant de cette matrice comme valeur pour l'argument z de la fonction image.plot.
Mais si tu fais ça tu perds les estimations de densité.
Après tu peux multiplier les densités par 1500 pour avoir un effectif estimé pour chaque cellule. Tu remplaces l'élément "z" obtenu par la fonction de densité par ce même élément multiplié par 1500.

Cordialement,
Maxime


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité