web-dev-qa-db-fra.com

Comment tracer un grand ctree () pour éviter les nœuds qui se chevauchent

Lorsque j'ai tracé le résultat de l'arbre de décision à partir du package ctree() à partir du package party, la police était trop grande et la boîte, elle aussi, trop grande. Ils chevauchent d'autres nœuds. 

Existe-t-il un moyen de personnaliser la sortie de plot() afin que la zone et la police soient plus petites? 

23
JPC

La réponse courte semble être non, vous ne pouvez pas changer la taille de la police, mais il existe quelques bonnes autres options. 

Je connais trois solutions possibles. Tout d'abord, vous pouvez modifier d'autres paramètres du tracé pour le rendre plus compact. Deuxièmement, vous pouvez l'écrire dans un fichier graphique et afficher ce fichier. Troisièmement, vous pouvez utiliser une autre implémentation de ctree () dans le paquet partykit, un paquet plus récent proposé par certains des mêmes auteurs. 

Exemple de tracé par défaut

library(party)
airq <- subset(airquality, !is.na(Ozone))
airct <- ctree(Ozone ~ ., data = airq, 
               controls = ctree_control(maxsurrogate = 3))
plot(airct)  #default plot, some crowding with N hidden on leafs

default plot

Parcelle simplifiée

# simpler version of plot
plot(airct, type="simple",           # no terminal plots
  inner_panel=node_inner(airct,
       abbreviate = TRUE,            # short variable names
       pval = FALSE,                 # no p-values
       id = FALSE),                  # no id of node
  terminal_panel=node_terminal(airct, 
       abbreviate = TRUE,
       digits = 1,                   # few digits on numbers
       fill = c("white"),            # make box white not grey
       id = FALSE)
   )

enter image description here

C'est un peu mieux et on pourrait peut-être l'améliorer davantage. Pour comprendre ces détails, j’ai à l’origine créé class(airct) qui a renvoyé "BinaryTree". Armé de cette information, j'ai commencé à lire ?plot.BinaryTree

Écrire dans un fichier

Une deuxième solution simple consiste à écrire le tracé dans un fichier, puis à visualiser le fichier. Vous devrez peut-être jouer avec les paramètres pour trouver le meilleur ajustement. 

png("airct.png", res=80, height=800, width=1600) 
   plot(airct) 
dev.off()

Tracer avec le paquet partykit à la place

Enfin, vous pouvez utiliser une nouvelle implémentation du paquet parti par le même auteur, qui n'est pas encore terminée. À ce stade (décembre 2012), la seule fonction qu'ils ont refaite est ctree(). Cette version vous permet de changer la taille de la police. 

    library(partykit) 
    airct <- ctree(Ozone ~ ., data = airq)
    class(airct)  # different class from before
    # "constparty" "party"  
plot(airct, gp = gpar(fontsize = 6),     # font size changed to 6
  inner_panel=node_inner,
  ip_args=list(
       abbreviate = TRUE, 
       id = FALSE)
  )

enter image description here

Ici, j’ai laissé les feuilles dans leur réglage par défaut car je n’ai franchement jamais trouvé comment le faire fonctionner comme je le voulais. Je soupçonne que cela a à voir avec le fait que le paquet est incomplet (à partir de décembre 2012). Vous pouvez en savoir plus sur la méthode de tracé commençant par ?plot.party

25
MattBagg

Une autre option (qui ne change pas ce que vous voulez, mais qui résout potentiellement le problème sous-jacent) consiste à modifier la taille du personnage lui-même, comme je l'ai appris dans ma classe pour mon travail.

Remplacez le r ci-dessous:

{r}

avec:

{r, fig.width=X, fig.height=Y} 

où le X et le Y doivent être remplacés par des chiffres choisis par vous en fonction de la taille qui vous convient le mieux.

Ce site Web , parle de le faire de manière plus détaillée et universelle dans tout le document.

0
user9894772