2016-12-19 27 views
2

は、次の例を見てくださいggplot2:時間軸上の複数の垂直線(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? 

私は各グループの変数valueための折れ線グラフ(AとB)を取得し、垂直線にeventsでイベントがあるたびにプロットしたいと思いますデータフレーム。

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

enter image description here

問題は、私は、対応するテキストと、各縦線(各イベント)をラベル付けしたいということです: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?私は簡単にそれを行うことができますアイデアを使用して

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

動作しませんか?何か案は? ありがとう!

答えて

5

あなたは私が維持するために、 `Y = -Inf`を使用して` ylims`応答が好き

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) 

enter image description here

+2

試すことができます。 geom_text(data = events、aes(label = text、x = time、y = -Inf)、angle = 90、inherit.aes = F、hjust = -.5、vjust = -.5) ' – Nate

+0

みんなありがとう。 @ NathanDay私は非常にエレガントなあなたのソリューションを見つける。あなたの議論が正確にここで何を説明して気になりますか?なぜ 'y = inf'ですか、' 'inherit.aes''を意味するのでしょうか?と 'hjust'ですか? –

+1

うん、そうです。 '-inf'はマイナスの無限大を意味します。これは、グラフの下限がどのようなものであっても、ラベルを柔軟に配置します。 ( 'y = 0'とは異なり、' 0'を静的に置きます。) 'inherit.aes = FALSE'は、' geom_text'が第1行目のグローバル 'aes(x = time)'を忘れることを意味します。 'hjust'と' vjust'は水平と垂直の位置合わせを行います。 _ "これらは、0(右/下)と1(上/左)または文字("左 "、"中 "、"右 "、"下 "、"中央 "、"上 ") "_ – lukeA

関連する問題