请看下面的例子
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))
这是怎么了有任何想法吗?
谢谢!
最佳答案
你可以试试
ggplot(data, aes(x = time)) +
geom_line(aes(y = value, group = group, color = group), size = 2 ) +
geom_vline(data = events, aes(xintercept = as.numeric(time))) +
geom_text(data = events, mapping = aes(label = text, y = 0), angle = 60, hjust = 0)
关于r - ggplot2:如何在时间x轴上将文本添加到多条垂直线(geom_vlines)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41231903/