は、次の例を見てください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)))
問題は、私は、対応するテキストと、各縦線(各イベント)をラベル付けしたいということです: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?私は簡単にそれを行うことができますアイデアを使用して
、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))
動作しませんか?何か案は? ありがとう!
試すことができます。 geom_text(data = events、aes(label = text、x = time、y = -Inf)、angle = 90、inherit.aes = F、hjust = -.5、vjust = -.5) ' – Nate
みんなありがとう。 @ NathanDay私は非常にエレガントなあなたのソリューションを見つける。あなたの議論が正確にここで何を説明して気になりますか?なぜ 'y = inf'ですか、' 'inherit.aes''を意味するのでしょうか?と 'hjust'ですか? –
うん、そうです。 '-inf'はマイナスの無限大を意味します。これは、グラフの下限がどのようなものであっても、ラベルを柔軟に配置します。 ( 'y = 0'とは異なり、' 0'を静的に置きます。) 'inherit.aes = FALSE'は、' geom_text'が第1行目のグローバル 'aes(x = time)'を忘れることを意味します。 'hjust'と' vjust'は水平と垂直の位置合わせを行います。 _ "これらは、0(右/下)と1(上/左)または文字("左 "、"中 "、"右 "、"下 "、"中央 "、"上 ") "_ – lukeA