首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误'ggplot_build‘没有适用的方法应用于类"trellis“的对象

错误'ggplot_build‘没有适用的方法应用于类"trellis“的对象
EN

Stack Overflow用户
提问于 2020-09-02 18:40:24
回答 1查看 774关注 0票数 1

在使用randomForest、partial和plotPartial之后,我想为3个(多)部分依赖图创建一个通用图例。每当我尝试任何建议的解决方案时,它都会出现:

代码语言:javascript
复制
Error in UseMethod("ggplot_build") : 
  no applicable method for 'ggplot_build' applied to an object of class "trellis"

下面是我的代码示例:

代码语言:javascript
复制
data(boston, package = "pdp") # load the (corrected) Boston housing data

library(pdp)
library(randomForest) # for randomForest, partialPlot, and varImpPlot functions
set.seed(101) # for reproducibility
boston.rf <- randomForest(cmedv ~ ., data = boston, importance = TRUE)
varImpPlot(boston.rf)


# Compute partial dependence data for lstat and rm
pd <- partial(boston.rf, pred.var = c("lstat", "rm"))
# Default PDP
a <- plotPartial(pd)

# Compute partial dependence data for lstat and dis
pd2 <- partial(boston.rf, pred.var = c("lstat", "dis"))
# Default PDP
b <- plotPartial(pd2)

# Compute partial dependence data for rm and dis
pd3 <- partial(boston.rf, pred.var = c("rm", "dis"))
# Default PDP
c <- plotPartial(pd3)

grid_arrange_shared_legend(a,b,c, ncol = 3, nrow = 1)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-02 19:17:11

您提取的代码很可能是为ggplot2编写的。plotPartial使用lattice

代码语言:javascript
复制
class(a)
[1] "trellis"

理论上,您可以使用latticeExtra将绘图与通用图例合并,但此函数假定图例相同:

代码语言:javascript
复制
library(latticeExtra)
library(pdp)
c(a,b)

但我不认为颜色条从一开始就是一样的,所以用共同的图例来绘制一个图是错误的

代码语言:javascript
复制
grid.arrange(a, b, ncol = 2)

要使其正确工作,您必须首先找到一种方法,使两个地块的图例相等。也许可以试试这样的东西:

代码语言:javascript
复制
library(patchwork)

# get the range of values
col_limits = range(c(pd$yhat,pd2$yhat,pd3$yhat))
col_limits = c(floor(col_limits[1]),ceiling(col_limits[2]))

plts = lapply(list(pd,pd2,pd3),function(i){

g = ggplot(i,aes(x=!!sym(colnames(i)[1]),
y=!!sym(colnames(i)[2]),fill=yhat)) + 
geom_tile() +  
scale_fill_viridis_c(limits=col_limits)+
theme_bw()

return(g)
})

combined = plts[[1]] + plts[[2]] + plts[[3]] & theme(legend.position = "bottom")

代码语言:javascript
复制
combined + plot_layout(guides = "collect")

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63703829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档