geom_vline не работает на моем boxplot

Я создал граненый коробочный сюжет. Теперь мне нужно добавить линии на сюжет. Линия не показывается с моими кодами ниже. Пожалуйста, предоставьте мне некоторую помощь! Спасибо!

Данные:

Year    |variable   |value
2001    |A          |39.605
2001    |A          |28.50759
2001    |A          |24.8132
2002    |A          |10.70765357
2002    |A          |7.8676
2002    |A          |16.05294712
2003    |A          |19.7847
2003    |A          |20.21635
2003    |A          |29.15491667
2001    |B          |50
2001    |B          |78
2001    |B          |90
2002    |B          |35
2002    |B          |62
2002    |B          |82.5
2003    |B          |49.5
2003    |B          |60
2003    |B          |84

Код:

pp <- ggplot(dta, aes(x=factor(Year),y=value)) +
  geom_boxplot() +
  facet_grid(variable~.,scales="free_y") +
  theme_bw()
pp + geom_vline(xintercept = 2002) #The line didn't show.
pp + geom_vline(xintercept = as.numeric(2002)) #The line didn't show.
pp + geom_vline(xintercept = which(levels(dta$Year) =="2002")) #The line didn't show.

2 ответа

Решение

Пожалуйста, попробуй

pp + geom_vline(xintercept = which(levels(factor(dta$Year)) =="2002"))

Вы указали aes(x=factor(Year),..., так что вам нужно найти целое число уровня фактора. levels(dta$Year) возвращается NULL так как Year не является фактором в исходном кадре данных dta, Итак, вам нужно добавить factor(dta$Year) в вашем звонке geom_vline():

levels(factor(dta$Year))
#[1] "2001" "2002" "2003"

Обратите внимание, что это будет работать, даже если вы измените свои входные данные, в отличие от жесткого кодирования определенного факторного уровня, как в вашем собственном ответе.

Понял! pp + geom_vline(xintercept = 2)

Другие вопросы по тегам