如何在基本 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()
Run Code Online (Sandbox Code Playgroud)

# 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)
Run Code Online (Sandbox Code Playgroud)

我认为这里的一切都是不言自明的,所以只显示结果:
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")
Run Code Online (Sandbox Code Playgroud)
这里的主要问题是绘制多边形。多边形将所有点一一连接起来,因此必须对它们进行排序。因此我首先订购 data.frame:
pre <- pre[order(pre$hp),]
Run Code Online (Sandbox Code Playgroud)
之后应该就清楚了:
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")
Run Code Online (Sandbox Code Playgroud)