【问题标题】:partykit: Change the terminal node boxplots to violinspartykit:将终端节点箱线图更改为小提琴
【发布时间】:2022-10-09 16:38:48
【问题描述】:

partykit 包为决策树 plot.constparty() 提供了绘图功能,它可以使用箱线图 (node_boxplot()) 显示终端节点的分布,使用下面的 iris 数据集的最小示例。

library("partykit")
ct <- ctree(Petal.Length ~ Sepal.Length + Sepal.Width, data = iris, stump = TRUE)
plot(ct, terminal_panel = node_boxplot)

我很想将箱线图显示为小提琴图。由于您可以编写自己的面板功能,这实际上应该是可能的。但是,似乎需要使用grid 函数设置小提琴图,所以我不知道该怎么做。我想这是一项相当繁琐的工作,但我相信很多用户会从这个面板功能中受益。关于如何实施的任何建议? (这里的第一个线索点:partykit: Change terminal node boxplots to bar graphs that shows mean and standard deviation

补充:如果我们有一个node_violinplot() 函数。面板函数node_mvar() 怎么会显示这些小提琴而不是默认的箱线图?

【问题讨论】:

    标签: r violin-plot party


    【解决方案1】:

    有两种自然的策略:

    1. 编写类似于node_boxplot()node_violinplot() 面板生成函数。
    2. 通过ggparty 包使用ggplot2 并利用现有的geom_violin()

      对于第一种策略,我建议复制node_boxplot() 的代码(包括设置它的类!)并将其重命名为node_violinplot()。它的大部分代码负责设置正确的视口和轴范围等,这些都可以保留。然后将“仅”替换grid.lines()grid.rect() 以绘制小提琴的调用。不过,我不确定计算小提琴元素坐标的最佳方法是什么。

      对于第二种策略,所有构建块基本上都是可用的,只需对其进行定制即可获得您想要的那种小提琴图。狐狸示例:

      该图可以复制如下:

      ## example tree
      library("partykit")
      ct <- ctree(dist ~ speed, data = cars)
      
      ## visualization with ggparty + geom_violin
      library("ggparty")
      ggparty(ct) +
        geom_edge() +
        geom_edge_label() +
        geom_node_splitvar() +
        geom_node_plot(gglist = list(
          geom_violin(aes(x = "", y = dist)),
          geom_boxplot(aes(x = "", y = dist), coef = Inf, width = 0.1, fill = "lightgray"),
          xlab(""),
          theme_minimal()
        ))
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-19
      • 1970-01-01
      • 2015-01-16
      • 1970-01-01
      • 2017-11-06
      • 2022-12-09
      • 2016-07-02
      相关资源
      最近更新 更多