Добавление линейного сюжета с помощью boxplot - PullRequest
0 голосов
/ 02 июля 2018

Пример данных

set.seed(123)
par(mfrow = c(1,2))

dat <- data.frame(years = rep(1980:2014, each = 8), x = sample(1000:2000, 35*8 ,replace = T))
boxplot(dat$x ~ dat$year, ylim = c(500, 4000)) 

У меня есть другой набор данных, который имеет одно значение для некоторых выбранных лет

ref.dat <- data.frame(years = c(1991:1995, 2001:2008), x = sample(1000:2000, 13, replace = T))
plot(ref.dat$years, ref.dat$x, type = "b")

enter image description here

Как я могу добавить линейный сюжет поверх боксплота

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Хитрость в том, чтобы вычислить ось X на блокпосте. У вас есть 35 блоков, и они нанесены на координаты х 1, 2, 3, ..., 35 - то есть год - 1979. Таким образом, вы можете добавить строку с lines как обычно.

set.seed(123)
dat <- data.frame(years = rep(1980:2014, each = 8), 
    x = sample(1000:2000, 35*8 ,replace = T))
boxplot(dat$x ~ dat$year, ylim = c(500, 2500)) 

ref.dat <- data.frame(years = c(1991:1995, 2001:2008), 
    x = sample(1000:2000, 13, replace = T))
lines(ref.dat$years-1979, ref.dat$x, type = "b", pch=20)

Line over boxplot

Точки было немного трудно увидеть, поэтому я изменил стиль точки 20. Кроме того, я использовал меньший диапазон по оси Y, чтобы оставить меньше пустого пространства.

0 голосов
/ 02 июля 2018

С ggplot2 вы можете сделать это:

ggplot(dat, aes(x = years, y = x)) + 
  geom_boxplot(data = dat,  aes(group = years)) + 
  geom_line(data = ref.dat, colour = "red") + 
  geom_point(data = ref.dat, colour = "red", shape = 1) +
  coord_cartesian(ylim = c(500, 4000)) + 
  theme_bw()

enter image description here

...