ggplotで凡例を調整する

アドベントカレンダーは頓挫しましたが備忘録として投稿します。

ggplotでjitterプロットなどを描いたとき、各点の透過度を調整することでデータの分布をビジュアルで示すことができます。

library(ggplot2)
library(tidyr)
library(dplyr)

#適当なデータの設定
df <- data.frame(category1=rnorm(5000,mean=3,sd=1),
                 category2=rnorm(5000,mean=5,sd=2),
                 category3=rnorm(5000,mean=10,sd=3))

#long型データに整形
df.long <-pivot_longer(df,
                       cols=colnames(df),
                       names_to = 'categories',
                       values_to = 'count')

#jitter plot
g <- ggplot(df.long,aes(x=categories,y=count,col=categories))+
  theme_classic()+
  geom_jitter()

ここでは3つのパラメータに基づく正規分布設定し、その分布をプロットしました。long型やggplotの基礎は前の投稿を参照してください。結果はこのとおりです。

点が多すぎるので潰れてしまって内部の構造がよくわからないですね。そこで各点の色を透過色に設定します。

#色設定パッケージを展開
library(RColorBrewer)

#好みの三色を設定。ここではプリセットのDark2を設定し、透過度を0.1とする。
my_col <- brewer.pal(3,"Dark2") %>% adjustcolor(alpha=0.1)
g <- ggplot(df.long,aes(x=categories,y=count,col=categories))+
  theme_classic()+
  geom_jitter(shape=16)+
  scale_color_manual(values = my_col)

このように色を変えてあげると中央値付近にデータが集中している正規分布の構造が見えてきます。ただ、このとき自動で凡例の色も薄くなってしまって見にくくなってしまいます。ついでに言えば点のサイズも小さくて見栄えが悪い。そこで、以下のようにlegendの設定を上書きしてやると解決できます。

#legendのパラメータ(ここでは点のサイズと透過度)を上書き
g <- ggplot(df.long,aes(x=categories,y=count,col=categories))+
  theme_classic()+
  geom_jitter(shape=16)+
  scale_color_manual(values = my_col)+
  guides(colour=guide_legend(override.aes = list(alpha=1,size=4)))

めでたし。

コメントする