爆炸型的饼图
这是CJ在我的星球里分享的一个关于饼图的实现方式,代码的排版太差,还有一点是对于普通用户来说,还是有点难度,如果是我,必须是写成函数,直接出图。
pieplot <- function(x, y, width=1) {
yy <- cumsum(y)
d= data.frame(ymin=yy-y + (1-width)/2,
ymax=yy - (1-width)/2,
group=x)
ggplot(d) +
geom_rect(aes(xmin=0, xmax=1, ymin=ymin, ymax=ymax, fill=group)) +
coord_polar(theta='y') + theme_void() + ylim(0, NA)
}
那么上面这个函数,默认就是一般的饼图,如果要分开,那么就是设置width
参数,如果想要中间空的,通过加xlim
,正如我在《中空的环形树》一文中所介绍的。
x <- letters[1:5]
y <- 1:5
pieplot(x, y)
pieplot(x, y, width=.8)
pieplot(x, y, width=.5)
pieplot(x, y) + xlim(-1, NA)
pieplot(x, y) + xlim(-.5, NA)
pieplot(x, y, width=.5) + xlim(-.5, NA)
于是这6条指令,画出下面6个图:
然而正如CJ提到的,一旦中间空了,每一部分就不是扇形,底部不尖了,这当然是有解决方案的,请移步《邪恶的我画出了善良的饼图》。
library(ggforce)
d = data.frame(x=letters[1:5], y=1:5)
ggplot(d) +
geom_arc_bar(aes(x0=0, y0=0, r0=0, r=1,
amount=y, fill=x, explode=.1),
stat='pie') +
coord_equal()