如何解决ggRandomForests生成的ggplot层级被强制按字母排序问题?
解决ggRandomForests箱线图因子顺序问题的替代方法
下面给你几个不用手动在ggplot里设置levels的解决思路:
提取绘图数据后手动重绘
先把ggRandomForests生成的绘图数据提取出来,再用ggplot自己画,完全掌控顺序:# 先生成gg对象并提取数据 gg_obj <- gg_boxplot(your_rf_model, xvar = "your_category_var") plot_df <- gg_obj$data # 这里如果之前已经设好因子水平,直接画图就行;没设的话也可以在这里再指定 ggplot(plot_df, aes(x = your_category_var, y = y_var)) + geom_boxplot()这种方式绕开了ggRandomForests对因子顺序的自动调整,完全按你想要的来。
直接修改现有绘图对象的数据
不用重写整个ggplot代码,直接修改ggRandomForests返回的绘图对象里的变量因子水平:p <- gg_boxplot(your_rf_model, xvar = "your_category_var") # 重新设置因子水平 p$data$your_category_var <- factor(p$data$your_category_var, levels = c("Yes", "No", "Maybe")) # 再绘图 print(p)这个方法更省事,直接在已有的绘图对象上调整。
在建模阶段锁定因子顺序
有时候ggRandomForests会从随机森林模型里读取变量信息,而非原始数据框。所以可以在调用rfsrc()建模时,就明确指定变量的因子水平:your_data$your_category_var <- factor(your_data$your_category_var, levels = c("Yes", "No", "Maybe")) # 建模时直接用这个变量,确保模型里的水平顺序正确 rf_model <- rfsrc(Surv(time, status) ~ your_category_var + other_vars, data = your_data)这样后续用ggRandomForests绘图时,会直接沿用模型里的因子顺序,不用再调整。
之所以你之前设置了数据框的因子水平却没用,大概率是ggRandomForests在生成绘图数据时,从模型对象里重新提取了变量,覆盖了原始数据的因子顺序。上面这几个方法都能避开这个问题。
内容的提问来源于stack exchange,提问作者Dan W
相关产品推荐
相关产品推荐

