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_params
gghighlight()
の対象から外したいレイヤーは、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()
でお手軽にハイライトできるのでぜひ使ってください