ggplot2::text
関数やggplot2::label
関数はデフォルトでデータの位置にラベルテキストを表示します。そのためデータの数が多い場合や、データの位置集まっているような場合にはラベルテキストが下図のように重なってしまい、読み取ることができません。
そこで、このような状態を解決するのに利用したいのがデータの位置に応じてラベルテキストを自動的に配置してくれるggrepel
パッケージです。
Packages and Datasets
本ページではR version 3.4.4 (2018-03-15)の標準パッケージ以外に以下の追加パッケージを用いています。
Package | Version | Description |
---|---|---|
ggrepel | 0.8.0 | Repulsive Text and Label Geoms for ‘ggplot2’ |
tidyverse | 1.2.1 | Easily Install and Load the ‘Tidyverse’ |
また、本ページでは以下のデータセットを用いています。
Dataset | Package | Version | Description |
---|---|---|---|
mtcars | datasets | 3.4.4 | Motor Trend Car Road Tests |
描画例
ggrepel::geom_text_repel関数
テキスト(ラベル)を表示するにはggrepel::geom_text_repel
関数を用います。基本的なパラメータ指定はggplot2::geom_text
と同じですので既存のコードを簡単に置き換えることが可能です。
mtcars %>%
tibble::rownames_to_column("label") %>%
ggplot2::ggplot(ggplot2::aes(x = wt, y = mpg, colour = as.factor(cyl))) +
ggplot2::geom_point(size = 3) +
ggrepel::geom_text_repel(ggplot2::aes(label = label)) +
ggplot2::labs(x = "重量[klbs]", y = "燃費[mpg]", colour = "気筒数")
ggrepel::geom_label_repel関数
ラベル(背景枠のついたテキスト)を表示する場合はggrepel::geom_label_repel
関数を用います。こちらもggrepel::geom_text_repel
関数と同様でggplot2::geom_label
関数と基本的なパラメータに互換性がありますので同様に使うことが可能です。
mtcars %>%
tibble::rownames_to_column("label") %>%
ggplot2::ggplot(ggplot2::aes(x = wt, y = mpg, colour = as.factor(cyl))) +
ggplot2::geom_point(size = 3) +
ggrepel::geom_label_repel(ggplot2::aes(label = label)) +
ggplot2::labs(x = "重量[klbs]", y = "燃費[mpg]", colour = "気筒数")
条件付き描画
外れ値などある条件を満たしたデータのみラベルテキストを表示したい場合が多々あります。このような場合はdplyr
パッケージにあるdplyr::case_when
関数を用いてラベル側を加工しておくことで描画が可能になります。
例えば、mtcars
データセットにおいてマニュアル車のみラベルを表示する場合は以下のように指定することで条件を満たしたデータのみにラベルを表示することが可能になります。
mtcars %>%
tibble::rownames_to_column("name") %>%
dplyr::mutate(label_text = dplyr::case_when(am == 1 ~ name, TRUE ~ "")) %>%
ggplot2::ggplot(ggplot2::aes(x = wt, y = mpg, colour = as.factor(cyl))) +
ggplot2::geom_point(size = 3) +
ggrepel::geom_label_repel(ggplot2::aes(label = label_text)) +
ggplot2::labs(x = "重量[klbs]", y = "燃費[mpg]", colour = "気筒数")