2016-12-22 1 views
0

Le package partykit trace les barres aux points terminaux des arbres, ce qui donne un rendu visuel des probabilités a posteriori des classes de variables dépendantes.Ajouter des graphiques à barres aux cercles des noeuds internes dans les arbres tracés par des articles de fête

Je voudrais ajouter ces barres de navigation également dans les nœuds internes, en dessous des cercles/ellipses standard. Cela doit utiliser une fonction qui est un mélange de node_inner() et node_barplot() à l'argument inner_panel de la méthode plot().

Mais ces fonctions ont des internes assez complexes et je ne sais pas comment mélanger les deux afin d'avoir des graphiques internes empilés verticalement.

Des idées?

+0

comme ceci 'ct <- ctree (facteur (CYL) ~, data = mtcars, minsplit = 2); plot (ct, inner_panel = node_barplot (ct)) ' – rawr

+0

non, c'est ce qui est tracée si vous venez de déselecter node_barplot. J'essayais de joindre à la fois node_inner et node_barplot en un. – Bakaburg

Répondre

1

C'est possible, ça n'a pas l'air très attrayant. Si vous souhaitez afficher le nom de la variable de fractionnement et la valeur p, il serait préférable de modifier l'argument mainlab de node_barplot. Dans la réponse à Ctree classification with weights - results displayed il y a dans l'illustration comment inclure des poids dans le titre - d'une manière similaire vous pouvez afficher la variable de division et la valeur de p.

Si vous êtes déterminé à configurer une nouvelle fonction de panneau qui a deux sous-panneaux, vous avez besoin d'un peu de programmation grid (le système graphique sur lequel est basée la méthode plot()). Vous devez configurer un grid.layout, puis passer à travers le résultat viewport s.

make_inner_and_barplot <- function(object, ...) { 
    function(node) { 
    ## layout 
    pushViewport(viewport(layout = grid.layout(nrow = 2, ncol = 1, 
     heights = unit(c(0.2, 0.8), "npc")))) 
    ## background color 
    grid.rect(gp = gpar(fill = "white", col = 0)) 
    ## circle 
    pushViewport(viewport(layout.pos.col = 1, layout.pos.row = 1)) 
    node_inner(object)(node) 
    popViewport() 
    ## circle 
    pushViewport(viewport(layout.pos.col = 1, layout.pos.row = 2)) 
    node_barplot(object, id = FALSE, ...)(node) 
    popViewport(2) 
    } 
} 

Avec la fonction de panneau résultant vous pouvez alors faire:?.

ct <- ctree(factor(cyl) ~ ., data = mtcars, minsplit = 2) 
plot(ct, inner_panel = make_inner_and_barplot(ct), tnex = 0.8) 

inner and barplot