如何绘制一个大的ctree()以避免重叠节点

时间:2012-12-06 20:28:23

标签: r output decision-tree

当我从ctree()包中的party绘制决策树结果时,字体太大而且框太大了。它们与其他节点重叠。

有没有办法自定义plot()的输出,以便框和字体更小?

2 个答案:

答案 0 :(得分:26)

简短的回答似乎是,不,你不能改变字体大小,但还有一些很好的其他选择。

我知道三种可能的解决方案。首先,您可以更改绘图中的其他参数,使其更紧凑。其次,您可以将其写入图形文件并查看该文件。第三,你可以在partykit包中使用ctree()的替代实现,这是一些同一作者的新包。

默认绘图示例

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

简化情节

# 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

这有点好一点,人们可以进一步改进它。为了弄清楚这些细节,我最初做了class(airct),返回了“BinaryTree”。有了这些信息,我开始阅读?plot.BinaryTree

写入文件

第二个简单的解决方案是将绘图写入文件,然后查看文件。您可能需要使用设置来找到最合适的设置。

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

用partykit包代替

最后,你可以使用一些同一作者对派对包进行更新而尚未完成的重新实现。此时(2012年12月),他们重新完成的唯一功能是ctree()。此版本允许您更改字体大小。

    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

在这里,我将叶子保留在默认设置中,因为我坦率地从来没有弄清楚如何让它按照我想要的方式工作。我怀疑这与包裹不完整的事实有关(截至2012年12月)。您可以阅读以?plot.party

开头的情节方法

答案 1 :(得分:0)

另一种选择(不会改变你想要的但可能解决根本问题的方法)是改变人物本身的大小,正如我在课堂上为我的作业所学到的。

替换下面的r:

{r}

使用:

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

其中X和Y需要由您选择的数字替换,具体取决于您认为哪种尺寸更好。

This website,在整个文档中更详细地论述了这一点。