ggplotの円グラフ(パイ・チャート)は棒グラフを変形
目次
ggplot を使って円グラフ(パイ・チャート)を作成するには、geom_pie()があるのかと思っていました。実は棒クラフを描いて、それを変形して作成します。
目的
ggplot()
で、割合を円グラフで示したい。
方法
円グラフを描くには、geom_pie()
のような関数を使うのかと思っていました。
しかしそのような関数はなく、geom_bar()
で棒グラフを作成し、それを変形してパイ・チャートを作成します。
棒グラフを作成
まずは棒グラフをgeom_bar()
を使用して作成します。
library(tidyverse)
df <- data.frame(Reason=c("A", "B", "C", "D", "E"),
Ratio=c(25, 10, 20, 40, 5))
df %>%
mutate(Reason = factor(Reason, levels=rev(df$Reason))) %>%
ggplot(aes(x="", y=Ratio, fill=Reason)) +
geom_bar(stat="identity", width = 1, color="white") -> bar
plot(bar)
この時、Factor の因子の順番を調整して、時計回りに並ぶ順番を調整します。
円グラフにした時、因子の順番で半時計回りに並びます。 一般的には時計回りに並んでほしいので、順番をrev()
で逆にします。棒グラフだと、上から因子の順番に並びます。
円グラフに変形
この棒グラフにcoord_polar()
関数を作用させるとパイ・チャートになります。ついでにtheme_void()
で円グラフの周りに表示される軸(?)を消しておきます。
bar +
coord_polar("y", start=0) +
theme_void() -> pie
plot(pie)
ただし、凡例の並び順は因子の並び順で表示されます。
そこでguide_legend()
で凡例の並び順を調整します。
また、ggsci
ライブラリーを使用して、少し落ち着いた New England Journal of Medicine の配色にしてみました。
library("ggsci")
pie +
guides(fill = guide_legend(reverse = TRUE)) +
#scale_fill_brewer(palette="Set2")
scale_fill_nejm()