ggplot2:如何在时间x轴上将文本添加到多条垂直线(geom_vlines)? [英] ggplot2: how to add text to multiple vertical lines (geom_vlines) on a time x-axis?

查看:248
本文介绍了ggplot2:如何在时间x轴上将文本添加到多条垂直线(geom_vlines)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请看下面的例子

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数据帧中发生事件时绘制垂直线.

I would like to get a line chart for the variable value for each group (A and B) and plot vertical lines every time there is an event in the events dataframe.

使用创意使用日期轴绘制ggplot垂直线如何获取垂直geom_vline到课程日期的x轴?如何在ggplot中为垂直线添加图例?我可以轻松做到这一点:

Using the ideas ggplot vertical line with date axis, How to get a vertical geom_vline to an x-axis of class date? and How to add legend for vertical lines in ggplot? I can easily do that:

ggplot(data, aes(x = time, y = value, group = group, color = group)) + 
  geom_line(size = 2 ) +
  geom_vline(data = events, aes(xintercept = as.numeric(time)))

问题是我想用相应的文本标记每个垂直线(每个事件),如

The problem is that I would like to label each vertical line (each event) with the corresponding text, as in R ggplot2: Labelling a horizontal line on the y axis with a numeric value.

不幸的是,无法进行以下操作

Unfortunately, doing the following does not work

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))

这是怎么了?有任何想法吗? 谢谢!

What is wrong here? any ideas? Thanks!

推荐答案

您可以尝试

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)

这篇关于ggplot2:如何在时间x轴上将文本添加到多条垂直线(geom_vlines)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆