gghighlight の
作者です。
すべてを
お話しします。
![]()
Hiroaki Yutani
あまり大したことしてないですが、細かいバグを直したりとかしてます(最近あんまやれてない)
伝説の Hadley Wickham 緊急来日回
このスライドでは合字フォントを使っています。 慣れていないと読みづらいかもです。すみません!
| 表示 | 実際の文字 |
|---|---|
<= |
< = (小なりイコール) |
<- |
< - (代入) |
|> |
| > (パイプ演算子) |
dplyr::filter() と同じルールで評価される1→ gghighlightの出番です!
CRANからインストールできます。
+で足すだけyの最大値が20以上の線をハイライトするyの最大値が20以上、かつ最小値が0以上の線priceの平均が4000以上をハイライト


dispが200以上をハイライト


AREAが0.20以上をハイライト


position_dodge()、position_jitter()ひとつのboxplotの幅は、その目盛りで横並びになるべきカテゴリの数で決まる。 絞り込まれてカテゴリ数が変わると、幅が違ってうまく重ならない。

ランダムにずれるので重ならない

seedを固定すると大丈夫

geom_point()やgeom_sf()など、1つのレコードが1つの図形を描くGeom→ レコードごとに計算される条件(例:disp >= 200、AREA >= 0.20)
geom_line()やgeom_bar()など、複数のレコードから1つの図形を描くGeom→ グループごとに計算される条件(例:mean(price) >= 4000、n() > 100)
→ gghighlight()は自動でどっちの計算も試して、うまくいった方を採用するので、雰囲気で使って大丈夫!
→ use_group_byを明示的に指定しよう
ここまで、わかりやすいように「条件」と書いてきたが、実はTRUE/FALSEでなくてもいい
max_highlightで変えられる(デフォルトは5)
gghighlight()の結果は通常のggplotオブジェクトなので、好きなようにいじれるunhighlighted_paramsgghighlight()の対象から外したいレイヤーは、gghighlight()の後に重ねる→ 複雑な図をつくりたいのであれば、gghighlightを使わないでやった方がいいかも…
+でテーマを変えたり、patchworkしたりできる。

グレーになった部分は全facetに表示される
なんなら、このためだけに空のgghighlight()を使うまである

グレーアウト部分の任意のパラメータを上書きできる
linewidthは太目にlinewidthは細目で上書きする
NULLを指定してグレーアウトを取り消すこともできる

gghighlight()は、絞り込んだ後のデータに色を割り当てるので、元のプロットの色とは一致しない。 keep_scales=TRUEを指定すれば、元の色と合わせることができる。
A: オリジナル、B: 通常、C: keep_scales=TRUE
gghighlight()は通常のggplotの関数と同じく+で足せるが、中身はぜんぜん違う
gghighlight()は+された時点で処理が実行されるgghighlight()より後に+されたレイヤーに対してはgghighlight()の力は及ばないdata引数に元のデータを渡す必要がある→ geom_point()はカラフルなまま

use_direct_label=FALSEにすると常に凡例を表示するlabel_paramsでカスタマイズできるgeom_line()へのラベルのつけ方はline_label_typeで変えられるggrepelパッケージを使う

secondary axisをおしゃれに使う

geomtextpathパッケージを使う

(ここからはマニア向けなので気軽に聞いてください)
まず、条件を満たさない値をNAで置き換える。
library(dplyr)
data_tweak <- data |>
mutate(
flag = max(y) >= 20,
bleached = if_else(flag, type, NA),
1 .by = type
)typeごとに集計
NAにグレーを割り当てる。

このタイプの方法(色の塗り分けで対応)は、わかりやすいが、facetできないという欠点がある。
facet_*()は、引数に指定した名前の列が含まれるデータは分割するが、含まれないデータは全facetに描く。 これを利用するため、分割されないように列名を変えたバージョンをつくる。
また、ハイライトするデータに絞ったバージョンもつくる。
この2つのデータを別々のgeom_line()として重ね合わせる。

今度はうまくfacetできている。
あまり知られていないが、geom_*()のdata引数には関数を指定することもできる。 その場合、ggplot()に指定されているデータにその関数を適用した結果が使われる。
なので、例えば、こういうデータを絞り込む関数を作る関数を定義しておいて、
ハイライトする方のレイヤーのdata引数に指定してもいい。

こうしておくと、ちょっと条件を変えたくなってもここだけ書き換えればよくて便利
こうしておくと、ちょっと条件を変えたくなってもここだけ書き換えればよくて便利
こうしておくと、ちょっと条件を変えたくなってもここだけ書き換えればよくて便利
(ま、こういう反復を手早くやりたくてgghighlight()をつくったんですけどね!)
keep_scales=TRUEを再現するには、expand_limits()という便利な関数がある。 任意のaesthetic variable(x、y、colour、fill…)のスケールの範囲を拡大してくれる。
データには含まれないが凡例にはラベルを表示したい、みたいなときに便利。

かぶらないように自動で位置を調整してくれる版のgeom_text()・geom_label()
パスに従ってテキストを配置してくれるパッケージ
+ gghighlight()でお手軽にハイライトできるのでぜひ使ってください