You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用partykit将回归树终端节点箱线图的Y轴设为对数刻度

给partykit回归树终端节点箱线图设置对数Y轴

我来帮你搞定这个需求!要让partykit绘制的回归树终端节点箱线图使用对数Y轴,我们需要自定义一个终端面板函数——因为默认的node_boxplot没有直接提供对数刻度的参数,不过我们可以基于它修改绘图逻辑,具体步骤如下:

步骤1:自定义对数刻度的终端面板函数

我们可以写一个继承自node_boxplot的自定义函数,在绘制箱线图时添加对数刻度的设置:

# 定义带对数Y轴的终端箱线图面板函数
log_node_boxplot <- function(obj, col = "black", fill = "lightgray", width = 0.5, yscale = NULL, ylines = 3, cex = 0.5, id = TRUE) {
  # 先调用默认的node_boxplot获取基础面板结构
  base_panel <- node_boxplot(obj, col = col, fill = fill, width = width, yscale = yscale, ylines = ylines, cex = cex, id = id)
  
  # 重写面板的draw函数,加入对数刻度设置
  base_panel$draw <- function(node) {
    # 获取当前节点的响应变量数据(这里是Price)
    y_vals <- obj$data[[obj$response]][node$id]
    
    # 处理Y轴范围:确保数据大于0(对数不能处理非正数),并转换为对数范围
    if (is.null(yscale)) {
      valid_y <- y_vals[y_vals > 0]
      y_log_range <- log10(range(valid_y))
      yscale <- 10^y_log_range  # 转换回原始刻度用于箱线图的ylim
    }
    
    # 绘制箱线图,指定log="y"开启对数Y轴
    boxplot(y_vals, at = 0, col = fill, border = col, width = width, 
            log = "y", ylim = yscale, axes = FALSE)
    
    # 添加Y轴(保持刻度可读性)
    axis(2, las = 1, cex.axis = cex)
    
    # 显示节点ID(如果开启id参数)
    if (id) {
      text(0, par("usr")[3] - 0.1 * diff(par("usr")[3:4]), 
           labels = node$id, cex = cex)
    }
    
    # 添加响应变量标签
    mtext(obj$response, side = 2, line = ylines, cex = cex)
  }
  
  return(base_panel)
}

步骤2:使用自定义面板绘制树

接下来用你原来的代码加载数据、构建树,然后调用自定义面板绘图:

library("rpart")
library("partykit")

# 构建回归树
fit <- rpart(Price ~ Mileage + Type + Country, cu.summary)
tree.2 <- as.party(fit)

# 使用自定义对数面板绘图
plot(tree.2, type = "simple", 
     terminal_panel = log_node_boxplot(tree.2, col = "black", fill = "lightgray", 
                                       width = 0.5, ylines = 3, cex = 0.5, id = TRUE))

注意事项

  • 如果你的Price变量存在0或负数,对数转换会报错,这时候可以先对数据做预处理(比如给所有价格加一个小正数,或者过滤掉非正数值)。
  • 自定义函数里的log="y"是给boxplot函数的参数,它会自动将Y轴转换为对数刻度,同时保留原始数据的箱线图形态。

内容的提问来源于stack exchange,提问作者Alvaro GC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:32:35