请看下面的例子

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 axisHow 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:如何在时间x轴上将文本添加到多条垂直线(geom_vlines)?-LMLPHP

问题是,我想用相应的文本标记每个垂直线(每个事件),如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)?-LMLPHP

关于r - ggplot2:如何在时间x轴上将文本添加到多条垂直线(geom_vlines)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41231903/

10-12 18:58