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

Posted

技术标签:

【中文标题】如何绘制一个大的 ctree() 以避免重叠节点【英文标题】:How to plot a large ctree() to avoid overlapping nodes 【发布时间】:2012-11-24 23:23:34 【问题描述】:

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

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

【问题讨论】:

JPC,你最好检查 ***.com/questions/13772715/… 以显示 N = 【参考方案1】:

简短的回答似乎是,不,您不能更改字体大小,但还有其他一些不错的选择。

我知道三种可能的解决方案。首先,您可以更改绘图中的其他参数以使其更紧凑。其次,您可以将其写入图形文件并查看该文件。第三,您可以在 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

简化图

# 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)
   )

这有点好,也许可以进一步改进。为了弄清楚这些细节,我最初做了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)
  )

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

【讨论】:

谢谢你,马特。您是否偶然知道我可以向每个圆圈节点显示 N = , 的方法?我一直试图查找它,但找不到它。再次感谢 我不知道,我害怕。如果您愿意切换方法,您当然可以使用 rpart:library(partykit);airct= rpart(Ozone ~ ., data = airq);plot(airct);text(test,use.n=T, all=T) 对于任何方法,您应该能够确定 N,只是它们的绘图方法的灵活程度不同。【参考方案2】:

另一个选项(不会改变你想要的,但可能会解决潜在问题)是改变图形本身的大小,正如我在课堂上学到的那样。

替换下面的r:

r

与:

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

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

This website,在整个文档中更详细和普遍地讨论了这样做。

【讨论】:

以上是关于如何绘制一个大的 ctree() 以避免重叠节点的主要内容,如果未能解决你的问题,请参考以下文章

sklearn 决策树 plot_tree 节点重叠

如何在 r studio 中缩小决策树图?

ctree()的终端节点如何提取拆分规则

如何将 ctree 节点变成向量?

如何打印带有范围的数值变量的 ctree 终端节点

ctree() - 如何获取每个终端节点的拆分条件列表?