ggplot2与饼图

饼图被大多数统计学家所诟病,原因是 人对长度更有直观的感受(而不是面积) ,所以大多数人都推荐用 条形图 等来代替 饼图 。现在我们不考虑这些因素,主要用ggplot2来实现饼图。

实现第一个饼图

A,B,C,D 四个名称,值分别为24,47,63,89。我们想描述各自的占比,所以使用ggplot2制作饼图。

1
2
3
4
5
6
7
8
9
library(ggplot2)
values = c(24, 47, 63, 89)
percent = round(values / sum(values) * 100, digits = 2)#求百分比*100,保留两位小数
percentstr = paste(percent, "%", sep="")#加百分号
labels = c("A", "B", "C", "D")
mydata = data.frame(values, percentstr, labels)
p = ggplot(aes(x = " ", y = values, fill = labels), data = mydata) + geom_bar(stat = "identity", width = 1) + coord_polar(theta = "y")
p + theme_bw() + scale_fill_brewer(palette = "Set3") + xlab("") + theme(axis.ticks = element_blank())
p + geom_text(family = "mono",aes(y = cumsum(values) - values / 2,label = percentstr), size = 6)#打标签的关键

理解cumsum函数

我觉得实现饼图最大的问题在于打标签,也就是cumsum这一步。

1
2
p = ggplot(aes(x = " ", y = values, fill = labels), data = mydata) + geom_bar(stat = "identity", width = 1)
p + geom_text(family = "mono", aes(y = cumsum(values) - values / 2, label = percentstr), size = 6)

喂他一颗糖