Ichijoji Sagarimatsu

統計モデリング 生態学のデータ解析・麻雀の解析など

ggplot2:別々のデータセットから描画した図に凡例を追加する

Rで別々のデータセット、あるいはワイドフォーマットからggplot2で作図する話をします。 (どうってことなくない?)と思う方も多いかもしれませんが、凡例の付け方にかなり悩んでしまったので、記事にします。

Rではロングフォーマットが求められる

ということを、初めてRを習った時には刷り込まれました。

特にggplot2での描画時はそうで、必要に応じてデータの連結やpivot_longerによるフォーマット変換などを行っていました。

しかしこれは結構めんどくさいです。

別にロングフォーマットである必要はなく、別々のデータでも、ワイドフォーマットでも、
不自由なく描画できるということに気付きました。


たとえば以下のような別々のデータがあります。

America <- data.frame(x=seq(-1, 1, length=10), y=0)
Japan <- data.frame(x=seq(-1, 1, length=10), y=seq(-1, 1, length=10))

別々のデータセットのまま、色分けして図示しようとすると、以下のような案が思いつきます。

library(ggplot2)
ggplot()+
  geom_line(data=America, aes(x=x, y=y), color="green", size=3)+
  geom_line(data=Japan, aes(x=x, y=y), color="blue", size=3)

f:id:IchijojiSagarimatsu:20210320140928p:plain

緑がAmericaで青がJapanなのですが、この方法では凡例を追加することができません(多分)

以下のようにすると解決します。

ggplot()+
  geom_line(data=America, aes(x=x, y=y, color="America"), size=3)+
  geom_line(data=Japan, aes(x=x, y=y, color="Japan"), size=3)+
  scale_color_manual(values = c("America" = "green",
                                "Japan" = "blue"))

f:id:IchijojiSagarimatsu:20210320141003p:plain

凡例の順番の変更は、以下のように工夫すると簡単に行えます。

# factor型の名前を"1","2"にして順番を調節し、後からlabelを変える
ggplot()+
  geom_line(data=America, aes(x=x, y=y, color="2"), size=3)+
  geom_line(data=Japan, aes(x=x, y=y, color="1"), size=3)+
  scale_color_manual(labels = c("1" = "Japan",
                                "2" = "America"),
                     values = c("1" = "blue",
                                "2" = "green"))

f:id:IchijojiSagarimatsu:20210320141035p:plain

別々のデータでも、ワイドフォーマットでもドンと来いになります。

これでもう図示のためだけにデータ整形で悩まなくていい!!…かもしれない