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)
緑が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"))
凡例の順番の変更は、以下のように工夫すると簡単に行えます。
# 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"))
別々のデータでも、ワイドフォーマットでもドンと来いになります。
これでもう図示のためだけにデータ整形で悩まなくていい!!…かもしれない