首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gbm模型结果三维部分图上的变化间距和轴标- visreg软件包

gbm模型结果三维部分图上的变化间距和轴标- visreg软件包
EN

Stack Overflow用户
提问于 2016-11-16 00:23:52
回答 1查看 1.1K关注 0票数 0

我使用visreg包和visreg2d()函数创建三维部分依赖关系图,显示两个gbm模型变量之间的交互。我需要改变x,y,z轴的标签,以及间距,为期刊文章画出很好的图表。我尝试在par()中更改设置,但这只允许我更改标签大小。

我现拟出以下情节:

代码语言:javascript
复制
visreg2d(final,n.trees=1000,xvar="ProbMn50ppb",yvar="DTW60Jurgens",plot.type="persp",type="conditional",
       theta=140,phi=40)

“最终”是我的模型对象。

我可以通过在axes=FALSE命令中设置visreg2d()来移除轴。因此,我猜想解决方案可能是创建具有自定义间隔的自定义标签。我也可以用xlab=, ylab= zlab=更改标签。但是,另一个问题是,我不能使用z标签的表达式,这是我需要的。

下面是我当前使用标签和轴绘制的图形:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-17 03:10:25

visreg2d(plot.type = "persp")使用persp()创建一个图形。如果我没记错的话,persp()不能使用expression()作为标签,也不能选择移动标签(您可以使用\n(中断)(如xlab="\nx-label")粗略地移动它)。因此,您需要使用text()手动执行此操作。这需要两个值,文本角度和中心坐标。在过去,我创建了一个函数来计算这些值(我引用了R邮寄帮助),我会显示它。

代码语言:javascript
复制
# top/bot are coordinates(x,y,z) of the axis; pmat is output of persp()
# pos means the label is c(left(-1) or right(1), down(-1) or up(1)) of the axis

persp_lab_f <- function(top, bot, pmat, space, pos = c(-1, -1))
{
  coords_3d <- list(top = top, bot = bot)
  coords_2d <- lapply(coords_3d, function(v, pmat) unlist(trans3d(v[1], v[2], v[3], pmat)), pmat = pmat)
  coords_2d$mid <- (coords_2d$top + coords_2d$bot)/2  # mid is calculated from 2d-coordinates
  # coords_2d$mid <- unlist(trans3d(((top + bot)/2)[1], ((top + bot)/2)[2], ((top + bot)/2)[3], pmat)) if use mid in 3d-coordinates
  tb_diff <- coords_2d$top - coords_2d$bot
  angle <- 180/pi * atan2(tb_diff[2], tb_diff[1])
  names(angle) <- "angle"
  center <-  coords_2d$mid + sqrt(space^2 / sum(tb_diff^2)) * rev(abs(tb_diff)) * pos
  out <- list(angle = angle, center = as.data.frame(t(center)))
  return(out)
}

你没有给可复制示例看,是我做的(下次请提供)。

代码语言:javascript
复制
fit <- lm(Ozone ~ Solar.R + Wind + Temp + I(Wind^2) + I(Temp^2) +
            I(Wind*Temp)+I(Wind*Temp^2) + I(Temp*Wind^2) + I(Temp^2*Wind^2),
          data=airquality)

vis_d <- visreg2d(fit, xvar = "Wind", yvar = "Temp", plot.type="persp", type="conditional", theta = 140, phi = 40)

x <- vis_d$x
y <- vis_d$y
z <- vis_d$z

x_top <- c(max(x), max(y), min(z))
x_bot <- c(min(x), max(y), min(z))
y_top <- c(max(x), max(y), min(z))
y_bot <- c(max(x), min(y), min(z))
z_top <- c(max(x), min(y), max(z))
z_bot <- c(max(x), min(y), min(z))

pmat <- persp(x, y, z, theta = 140, phi = 40)

xlab_param <- persp_lab_f(x_top, x_bot, pmat, 0.1, pos = c(1, -1))
ylab_param <- persp_lab_f(y_top, y_bot, pmat, 0.1)
zlab_param <- persp_lab_f(z_top, z_bot, pmat, 0.1)

par(mar=c(1,1,1,1))
visreg2d(fit, xvar = "Wind", yvar = "Temp", plot.type="persp", type="conditional", theta = 140, phi = 40, 
         xlab = "", ylab = "", zlab = "")

text(xlab_param$center, srt = xlab_param$angle + 180, "xxxxxxxxxx")
text(ylab_param$center, srt = ylab_param$angle, "yyyyyyyyyy")
text(zlab_param$center, srt = zlab_param$angle + 180, labels = bquote(Sigma ~ .("zzzzzzzzzz")))

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

https://stackoverflow.com/questions/40622083

复制
相关文章

相似问题

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