Как вы рисуете графики диапазона точек и ленты в базовой графике 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)
Я думаю, что здесь все понятно, поэтому просто покажу результат:
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")