[RESOLU] Superposer eboulis sur CAH

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

Bigot Anthony
Messages : 108
Enregistré le : 07 Avr 2009, 09:07

[RESOLU] Superposer eboulis sur CAH

Messagepar Bigot Anthony » 08 Juil 2013, 11:29

Bonjour,

je cherche à superposer les éboulis sur l'arbre de la CAH en indiquant exactement où les mettre (pour ne pas trop empiéter sur l'arbre).

J'ai essayé en vain :
split.screen()
layout()
par(mfrow)
sublot ne semble pas fonctionner, R me dit qu'il ne connait pas, même avec ??subplot

Dans l'idée, je fais mon arbre sur toutes l'espace de l'image ;
puis par(new=T) et là je découpe la zone graphique pour mettre le graphique des éboulis où je veux et à la taille que je souhaite...

Idéalement dans le coin en haut à droite vu que l'arbre de la CAH à l'air d'être organisé de sorte que cette zone est souvent libre.

Code reproductible :

Code : Tout sélectionner

# librairie ; je ne sais plus lesquelles il faut exactement selon la version de R utilisée...
library("ade4")
library("graphics")

# utilisation du jeu IRIS

# calcul de la matrice des distances
distance=dist(iris[,1:4])

# arbre contient la CAH
arbre=hclust(distance,meth="ward")
# longueur de l'arbe pour réduire le graphique des éboulis
length_arbre=length(arbre$height)

# plot de l'arbre
plot(arbre,cex.main=3,main="", col.main="lightskyblue3",lwd=2,cex.axis=3, yaxt="n")
rect.hclust(arbre,k=4,bor="blue")

# ajout des éboulis
par(new=T)
# découpage du nouveau graphique
layout(mat=matrix(c(4,2,1,3), 2, 2), widths = c(0.6, 0.4),   heights = c(0.5,0.5) , respect = TRUE)

# graphe des eboulis
plot(arbre$height[length_arbre:(length_arbre-15)], pch=20,type="b", col=colgéné,   ylab="", xlab="", main="", cex.lab=1, lwd=1.5, cex.axis=1, yaxt="n", tcl=-0.5)
abline(v=5, lty=2, lwd=2, col="gray60")




Merci ; quelle prise de tête pour faire quelque chose d'aussi simple...
La règle des 3G vous connaissez? R est:
GRATUIT GIGANTESQUE et GENIAL

Nicolas Péru
Messages : 1408
Enregistré le : 07 Aoû 2006, 08:13

Messagepar Nicolas Péru » 08 Juil 2013, 12:02

Salut,

Je ne comprends pas pq ça ne marcherait pas avec un layout :

Code : Tout sélectionner

layout(matrix(c(1,1,2,1),nc=2))
plot(arbre,cex.main=3,main="", col.main="lightskyblue3",lwd=2,cex.axis=3, yaxt="n")
rect.hclust(arbre,k=4,bor="blue")
plot(arbre$height[length_arbre:(length_arbre-15)], pch=20,type="b",   ylab="", xlab="", main="", cex.lab=1, lwd=1.5, cex.axis=1, yaxt="n", tcl=-0.5)
abline(v=5, lty=2, lwd=2, col="gray60")


Sauf si j'ai pas tout compris à la demande...

voir aussi

Code : Tout sélectionner

?add.scatter


Nicolas

Bigot Anthony
Messages : 108
Enregistré le : 07 Avr 2009, 09:07

[RESOLU] Tutoriel Layout

Messagepar Bigot Anthony » 08 Juil 2013, 13:43

Merci Nicolas, le rendu est pas mal du tout.

Je viens de comprendre comment layout fonctionne donc j'en profite pour partager parce que ce n'est absolument pas trivial !

Dans matrix, on indique où les graphiques vont apparaitre, donc ici:

Code : Tout sélectionner

layout(matrix(c(1,1,2,1),nc=2))

Le découpage de la zone graphique totale est en 4 parties égales, sur 2 colonnes :
1 3
2 4

Le premier graphique va etre plotter sur les zones 1, 2 et 4
Le second graphique sur la zone 3 uniquement.


Je peux obtenir quelque chose de similaire avec une zone plus grande verticalement pour le second graphique afin de mieux exploiter le blanc à droite :

Code : Tout sélectionner

layout(matrix(c(1,1, 1,2, 2 ,1),nc=2))

Le découpage est fait comme cela :
1 4
2 5
3 6
Premier graphique : zone 1,2,3 et 6
Second graphique : zone 4 et 5

Pour aller plus loin, on peut spécifier la taille de chaque sous zone, ici découpage en 9 avec la première ligne et la colonne de droite uniquement là pour réduire la taille du graphique bien comme il faut :

Code : Tout sélectionner

layout(matrix(c(1,1,1,1,2,1,1,1),nc=3),widths = c(0.55, 0.4, 0.05), heights = c(0.03, 0.67 ,0.35))

et c'est très propre.

Merci !
La règle des 3G vous connaissez? R est:

GRATUIT GIGANTESQUE et GENIAL

Nicolas Péru
Messages : 1408
Enregistré le : 07 Aoû 2006, 08:13

Messagepar Nicolas Péru » 08 Juil 2013, 13:52

Dans ce cas, ceci peut aider à voir comment les choses vont apparaitre

Code : Tout sélectionner

layout(matrix(c(1,1,2,1),nc=2))
layout.show(n=2)


Retourner vers « Questions en cours »

Qui est en ligne

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