底座R标牌:点范围和带

tpxzln5u  于 2023-04-18  发布在  其他
关注(0)|答案(1)|浏览(125)

如何在基本R图形中绘制点范围图和带状图?
这里有两个ggplot2图,我想复制它们,除了基本的R安装之外,没有依赖性。我 * 不 * 需要复制任何主题元素或标签。

library(ggplot2)
library(marginaleffects)

# point range
mod <- lm(mpg ~ hp + factor(cyl), mtcars)
dat <- data.frame(names(coef(mod)), coef(mod), confint(mod)) |>
    setNames(c("x", "y", "ymin", "ymax"))
ggplot(dat, aes(x = x, y = y, ymin = ymin, ymax = ymax)) +
    geom_pointrange()

# ribbon
mod <- lm(mpg ~ hp, mtcars)
pre <- predictions(mod)
ggplot(pre, aes(x = hp, y = estimate, ymin = conf.low, ymax = conf.high)) +
    geom_ribbon(alpha = .3)

7vux5j2d

7vux5j2d1#

首先

我认为这里的一切都是不言自明的,所以只显示结果:

plot.new()
plot.window(xlim = c(1, nrow(dat)), ylim = range(dat[,-1]))
grid()

points(1:nrow(dat), dat$y)
segments(1:nrow(dat), dat$ymin, 1:nrow(dat), dat$ymax)

axis(1, at = 1:nrow(dat), dat$x)
axis(2, las = 2)

title("point-range", adj=0)
title(ylab = "beta")

这里的主要问题是绘制多边形。多边形将所有点一个接一个地连接起来,因此必须对它们进行排序。因此我首先对data.frame进行排序:

pre <- pre[order(pre$hp),]

在此之后,应该明确:

plot.new()
plot.window(xlim = range(pre$hp), ylim = range(pre$conf.low, pre$conf.high))
grid()

polygon(c(pre$hp, rev(pre$hp)), c(pre$conf.low, rev(pre$conf.high)),
        col = adjustcolor("cornflowerblue", 0.3))

axis(1, lwd = 0)
axis(2, lwd = 0, las=2)

title("Ribbon", adj = 0)
title(xlab = "hp")
title(ylab = "estimate")

相关问题