【发布时间】:2017-05-05 01:18:33
【问题描述】:
请看下面的例子
library(dplyr)
library(lubridate)
library(ggplot2)
data <- data_frame(time = c(ymd(20160201),
ymd(20160202),
ymd(20160203),
ymd(20160201),
ymd(20160202)),
value = c(1,1,1,2,2),
group = c('A','A','B','B','B'))
events <- data_frame(time = c(ymd(20160201),
ymd(20160202)),
text = c('who let the dogs out?',
'who? who? who?'))
ggplot(data, aes(x = time, y = value, group = group, color = group)) +
geom_line(size = 2 ) +
geom_vline(data = events, aes(xintercept = as.numeric(time)))
> data
# A tibble: 5 × 3
time value group
<date> <dbl> <chr>
1 2016-02-01 1 A
2 2016-02-02 1 A
3 2016-02-03 1 B
4 2016-02-01 2 B
5 2016-02-02 2 B
> events
# A tibble: 2 × 2
time text
<date> <chr>
1 2016-02-01 who let the dogs out?
2 2016-02-02 who? who? who?
我想为每个组(A 和 B)获取变量 value 的折线图,并在 events 数据框中每次发生事件时绘制垂直线。
使用ggplot vertical line with date axis、How to get a vertical geom_vline to an x-axis of class date? 和How to add legend for vertical lines in ggplot? 的想法我可以轻松做到:
ggplot(data, aes(x = time, y = value, group = group, color = group)) +
geom_line(size = 2 ) +
geom_vline(data = events, aes(xintercept = as.numeric(time)))
问题是我想用相应的文本标记每条垂直线(每个事件),如R ggplot2: Labelling a horizontal line on the y axis with a numeric value。
很遗憾,执行以下操作不起作用
ggplot(data, aes(x = time, y = value, group = group, color = group)) +
geom_line(size = 2 ) +
geom_vline(data = events, aes(xintercept = as.numeric(time))) +
geom_text(data = events, aes(x = as.numeric(time), y = 0, label = text))
这里有什么问题?有任何想法吗? 谢谢!
【问题讨论】: