r - 使用 ggparty 的决策 TreeMap 边缘的小数位数

标签 r ggplot2 decision-tree

我想使用强大的 ggparty 包绘制决策树(由 partykit 包估计)。除了数字拆分变量的小数位数外,一切都很好。我如何格式化geom_edge_label()中的breaks_label,例如,将> 75.33333更改为> 75.3下面的情节? round() 不起作用。我可能会通过一般的 options(digits = 3) 使用解决方法,但我想知道是否有更直接的方法。

library("ggparty") 
data("WeatherPlay", package = "partykit")

sp_o <- partysplit(1L, index = 1:3)
sp_h <- partysplit(3L, breaks = 75 + 1/3)
sp_w <- partysplit(4L, index = 1:2)
pn <- partynode(1L, split = sp_o, kids = list(
    partynode(2L, split = sp_h, kids = list(
        partynode(3L, info = "yes"),
        partynode(4L, info = "no"))),
    partynode(5L, info = "yes"),
    partynode(6L, split = sp_w, kids = list(
        partynode(7L, info = "yes"),
        partynode(8L, info = "no")))))
py <- party(pn, WeatherPlay)

ggparty(py) +
    geom_edge() +
    # geom_edge_label() +
    geom_edge_label(mapping = aes(label = paste(breaks_label))) +
    geom_node_splitvar() +
    geom_node_info()

reprex package 创建于 2020-03-05 (v0.3.0)

最佳答案

感谢使用 ggparty!

所以我认为,对于当前版本确实没有直接的解决方案。但我会确保在未来实现它!

通常,通过仅在节点的子集上使用 geom,通常可以解决很多问题。正如您已经注意到的那样,breaks_label 不是存储为数字,而是存储为带有一些可解析文本的字符,用于表示它们前面的不等号。因此,您必须使用类似 substr() 的方法。

ggparty(py) +
  geom_edge() +
  geom_edge_label(id = -c(3, 4)) +
    geom_edge_label(mapping = aes(label = paste(substr(breaks_label, start = 1, stop = 15))),
                    id = c(3, 4)) +
  geom_node_splitvar() +
  geom_node_info() 

我还修改了一个内部函数以包含舍入功能,因此您可以从 github 获取并使用它。但我还没有真正测试过,所以使用风险自负;)

library(devtools)
source_url("https://raw.githubusercontent.com/martin-borkovec/ggparty/martin/R/add_splitvar_breaks_index_new.R")

rounded_labels <- add_splitvar_breaks_index_new(party_object = py,
                                                plot_data = ggparty:::get_plot_data(py), 
                                                round_digits = 2)

ggparty(py) +
  geom_edge() +
  geom_edge_label(mapping = aes(label = unlist(rounded_labels)),
                  data = rounded_labels) +
  geom_node_splitvar() +
  geom_node_info()

关于r - 使用 ggparty 的决策 TreeMap 边缘的小数位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60553985/

相关文章:

R 到 Stata : Exporting tibble with value labels

r - 如何使用 R 同时计算多个子量表的 Cronbach's alpha?

r - 带 R 的多彩标题

c# - 将函数转储到动态程序集中

python - 在 scikit-learn 中获取 DecisionTreeRegressor 的叶节点处的值分布

r - 删除两个ggplot图例中的重复项

r - 概率分类 - R

r - 如何在3D散点图中将色标分配给变量?

r - ggplot2 - 打印绘图气球内存

python - 具有可变数量输入的决策图