ラベルと項目名を操作する
以下の説明ではggplot2を含めて3つのパッケージを使う。
library(dplyr) library(tidyr) library(ggplot2)
データは次のように準備した。
# テストデータの準備 testdata <- data.frame(x = seq(1, 10, 0.1)) %>% mutate(sin = sin(x), cos = cos(x))
散布図形式のプロットに適した形にデータフレームを整形する。
# 散布図の骨格を決める p <- testdata %>% gather(ftype, val, -x) %>% # x以外の変数をvalにまとめ、列名をftypeにグループ変数として格納する ggplot(aes(x = x, y = val))
geom_line()を使ってグラフを描く。このとき、colorやltyなどの審美的属性にグループ変数をマッピングすることで変数をグループ別にプロットできる。そして、凡例は勝手に追加される*1。
# colorをftypeにマッピングする p + geom_line(aes(color = ftype))
凡例のラベルを操作する簡単な方法はlabs()関数を使うこと*2で、例えば
p + geom_line(aes(color = ftype)) + labs(color = "関数")
のようにしてやればよい。
しかし、項目名(ここでのsinとcos)まで変更しようとすると、labs関数では設定ができない。項目名を設定するには、スケールを調整する関数を使用する必要がある。カラースケールの場合はscale_color_◯◯()関数にlabels引数を設定する。◯◯の部分にはhueやgreyなどスケール名が入るが、デフォルトの配色ではhueである。
# colorをftypeにマッピングし、凡例のラベルを変更する p + geom_line(aes(color = ftype)) + scale_color_hue(name = "関数", labels = c(sin = "正弦", cos ="余弦") ) + theme_grey(base_family = "HiraKakuProN-W3") # OS Xで日本語をプロットする際にはbase_familyの指定が必要
複数の審美的属性が1つのグループ変数に割り当てられている場合
1つのグループ変数に複数の審美的属性を同時にマッピングすることもできる。
# colorとltyの2属性にftypeをマッピングしたプロットを作成 p2 <- p + geom_line(aes(color = ftype, lty = ftype)) # そのままプロット p2
このとき、ラベルの片方だけを変更してしまうと、凡例が2つに分裂してしまうので注意が必要である。
theme_set(theme_grey(base_family = "HiraKakuProN-W3")) # themeのデフォルト設定そのものを変更 # 凡例のラベルをcolorの方だけいじった場合 p2 + scale_color_hue(name = "関数", labels = c(sin = "正弦", cos ="余弦"))
これを防ぐには、2つの凡例に全く同じラベル名と項目名を設定する。なお、線種のスケールはscale_linetype()で調整できる。
# 凡例のラベルを両方いじった場合 p2 + scale_color_hue(name = "関数", labels = c(sin = "正弦", cos = "余弦")) + scale_linetype(name = "関数", labels = c(sin = "正弦", cos = "余弦"))
labs()を使ってラベルだけを変更する場合も同様で、
p2 + labs(color = "関数", lty = "関数")
のようにしてやる必要がある。