こういう感じで時系列プロットの端点にラベルを表示したい。
この方が時系列とラベルの対応がわかりやすくて良い。
ggrepel パッケージを使うと簡単にできるが、いくつか注意点があるのでここで紹介したい。
まずはデータを用意する。
library(tidyverse) set.seed(314) d <- map_dfr( c("setosa", "versicolor", "virginica"), ~ tibble( idx = 1:400, value = cumsum(runif(400, -1, 1)), type = . ) ) ggplot(d, aes(idx, value, colour = type)) + geom_line()
普通にプロットするとこんな感じだが、右端にラベルをつけたい。
ggrepel はいい感じにラベルを配置してくれるパッケージである。
まずはラベルとなるカラムを用意する。
右端にだけラベルをつけたいので ids
が最大となる点にだけ type
をラベルとして代入し、その他は NA
を入れる。
library(ggrepel) d <- d %>% mutate(label = ifelse(idx == max(idx), type, NA)) ggplot(d, aes(idx, value, colour = type)) + geom_line() + geom_label_repel(aes(label = label), na.rm = TRUE)
デフォルトのままだと折れ線にラベルが重なってしまう。
ラベルを右側に出すためには x 軸を右側に広げて nudge_x = Inf
を指定すると良い。
ggplot(d, aes(idx, value, colour = type)) + geom_line() + geom_label_repel(aes(label = label), na.rm = TRUE, nudge_x = Inf) + xlim(NA, 500)
この方法だとラベルはプロットの右端に張り付く。
時系列のすぐ右に出したい場合は、xlim
引数に時系列の端点を指定すると良い。
ggplot(d, aes(idx, value, colour = type)) + geom_line() + geom_label_repel(aes(label = label), na.rm = TRUE, xlim = c(400, NA)) + xlim(NA, 500)
謝辞
上記は r-wakalang の Slack 上で @u_ribo さんと @yutannihilation さんに教えていただきました。 ありがとうございます。
参考
- ggplot2 パッケージによる可視化の際のラベルの重なりを防ぐ|Colorless Green Ideas
- データ視覚化のデザイン #1|Go Ando / THE GUILD|note
- 「データ視覚化のデザイン #1」をggplot2で実装する(in R) - Qiita
![RユーザのためのRStudio[実践]入門−tidyverseによるモダンな分析フローの世界− RユーザのためのRStudio[実践]入門−tidyverseによるモダンな分析フローの世界−](https://images-fe.ssl-images-amazon.com/images/I/51yOW-20h-L._SL160_.jpg)
RユーザのためのRStudio[実践]入門−tidyverseによるモダンな分析フローの世界−
- 作者: 松村優哉,湯谷啓明,紀ノ定保礼,前田和寛
- 出版社/メーカー: 技術評論社
- 発売日: 2018/06/29
- メディア: 大型本
- この商品を含むブログ (1件) を見る