2017-05-01 4 views
0

J'ai un ctree produit et je veux faire d'autres modifications dessus.Comment éditer les étiquettes de ctree dans R

Mon code est:

plot(ct, 
    main = expression('Suitable Brook Trout Habitat (m'^2*'/100m'^2*')'), 
    inner_panel = node_inner(ct, fill = c("white"), id = FALSE), 
    terminal_panel = node_boxplot(ct, col = "black", fill = "lightgray", 
    width = 0.5, yscale = NULL, ylines = 3, cex = 0.5, id = FALSE) 
) 

ctreeimage

Je voudrais ajouter des étiquettes à l'axe y sur les boxplots et aux variables telles que 16,4 (désireraient à 16,4 m).

Toute aide serait grandement appréciée.

Répondre

1

Il n'est pas complètement simple de le faire car il faudrait modifier les fonctions du panneau pour faire différentes choses dans différents panneaux. Par exemple, vous n'avez besoin que des mètres des deux côtés du noeud 1 et vous n'avez besoin que de l'étiquette de l'axe y à gauche du noeud 2. Bien sûr, vous pouvez également répéter l'étiquette de l'axe des y aux noeuds 4 et 5 serait redondant. C'était la motivation principale pour l'omettre complètement pour éviter le "fouillis" visuel.

Par conséquent, ma recommandation est de créer d'abord l'intrigue comme vous l'avez fait ci-dessus, puis d'ajouter manuellement les morceaux dont vous avez besoin. Pour ce faire, on peut tirer parti du système grid de ce qu'on appelle viewport s. Ce sont les régions de traçage créées pour les nœuds internes, les arêtes et tous les nœuds terminaux. Par défaut, les viewpors sont supprimés après la création du tracé (appelé pop ping viewports dans le jargon grid). Mais vous pouvez simplement les conserver en réglant pop = FALSE. Toutes les fenêtres ont alors simplement des noms que vous pouvez utiliser pour naviguer.

Pour un exemple reproductible j'utiliser les cars données dans R qui donnent également un arbre avec trois noeuds terminaux:

library("partykit") 
ct <- ctree(dist ~ speed, data = cars) 

L'intrigue peut alors être mis en place comme dans votre exemple juste avec le pop = FALSE supplémentaire au fin:

plot(ct, 
    main = expression('Suitable Brook Trout Habitat (m'^2*'/100m'^2*')'), 
    inner_panel = node_inner(ct, fill = c("white"), id = FALSE), 
    terminal_panel = node_boxplot(ct, col = "black", fill = "lightgray", 
    width = 0.5, yscale = NULL, ylines = 3, cex = 0.5, id = FALSE), 
    pop = FALSE 
) 

pour l'étiquette de l'axe y dans le noeud 3, nous pouvons passer à la fenêtre avec l'étiquette "node_boxplot3plot". (Dans votre cas, le nœud 2 au lieu de 3, bien sûr.) Ensuite, nous pouvons utiliser grid.text() pour ajouter l'étiquette de l'axe y. Les coordonnées sont (-3 lignes de texte) horizontalement et au milieu (0,5 coordonnées parent normalisé) verticalement:

seekViewport("node_boxplot3plot") 
grid.text("Hello World!", 
    x = unit(-3, "lines"), y = unit(0.5, "npc"), rot = 90) 

Enfin, on ajoute les "m" dans les première et seconde étiquettes de bord à partir du noeud 1. Ceux-ci sont appelés "edge1-1" et "edge1-2", respectivement. Maintenant, la position horizontale est à nouveau au milieu de cette fenêtre (o.5 npc) plus la largeur de la chaîne "< 17" ("< 16.4" dans votre cas):

seekViewport("edge1-1") 
grid.text("m", x = unit(0.5, "npc") + unit(1, "strwidth", "< 17")) 
seekViewport("edge1-2") 
grid.text("m", x = unit(0.5, "npc")+ unit(1, "strwidth", "> 17")) 

Ensemble ce rendement:

ctree with enhanced labels