将条形图添加到 partykit 绘制树中内部节点的圆圈

Add barplots to circles in inner nodes in partykit plotted trees

partykit 包在树的终端节点处绘制条形图,直观呈现因变量的后验概率 类。

我想在内部节点中也添加这些条形图,低于标准 circles/ellipses。这需要使用一个混合了 node_inner()node_barplot() 的函数到 plot() 方法的 inner_panel 参数。

但是这些函数的内部结构非常复杂,我不确定如何将两者混合使用才能使内部图垂直堆叠。

有什么想法吗?

有可能,只是看起来不太吸引人。如果要显示拆分变量的名称和 p-value,最好调整 node_barplotmainlab 参数。在回答 Ctree classification with weights - results displayed 插图中有如何在标题中包含权重 - 以类似的方式,您可以显示拆分变量和 p-value。

如果您决定设置一个具有两个子面板的新面板功能,则需要一些 grid 编程(plot() 方法所基于的图形系统)。您需要设置一个 grid.layout,然后通过生成的 viewports.

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

使用生成的面板功能,您可以执行以下操作:

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