概述
饼状图,又称为饼图,能够划分几个扇形的圆形统计图。可以描述量、频率、占比的相对关系。R语言中,可以用graphics包的pie()函数、ggplot2包的geom_bar()配合coord_polar()函数绘制,3D 的饼状图,可以使用 plotrix包的pie3D()函数。本文详细介绍饼状图的绘制。
graphics包的pie()函数
基本用法
pie(x, labels = names(x), edges = 200, radius = 0.8,
clockwise = FALSE, init.angle = if(clockwise) 90 else 0,
density = NULL, angle = 45, col = NULL, border = NULL,
lty = NULL, main = NULL, …)
具体参数
x: 数值向量,表示每个扇形的面积
labels: 字符型向量,表示各扇形面积标签
edges: 多边形的边数(圆的轮廓类似很多边的多边形)
radius: 饼图半径
main: 饼图标题
clockwise: 逻辑值,用来指示饼图各个切片是否按顺时针做出分割
angle: 设置底纹的斜率
density: 底纹的密度,默认值为 NULL
col: 是表示每个扇形的颜色,相当于调色板
案例
#创建数据
x <- c(22, 18, 52)
#定义标签
labels <- c("乔木", "灌木", "草本")
#绘制基本饼状图
pie(x, labels, main="不同类型植被占比")

par(mfcol=c(1,2))
#填充颜色(默认)
pie(x, labels, main="不同类型植被占比", col = rainbow(length(x)))
#填充颜色(自定)
cols = c("blue","red","grey")
pie(x, labels, main="不同类型植被占比", col = cols)

#计算占比
piepercent<- paste(round(100*x/sum(x), 2), "%")
#查看计算结果
piepercent
#绘制占比图
pie(x, labels = piepercent, main = "不同类型植被占比",col = rainbow(length(x)))
#添加标签
legend("topright", c("乔木", "灌木", "草本"), cex = 1,
fill = rainbow(length(x)))


ggplot2包绘制
#加载ggplot2包
library(ggplot2)
##先绘制柱状图
bp<- ggplot(df, aes(x="", y=x, fill=labels))+
geom_bar(width = 1, stat = "identity")
#查看一下柱状图
bp

##再绘制原始饼状图
pie<-bp + coord_polar("y", start=0)
#查看饼状图
pie

#美化/出图
pie +
theme(axis.text.x=element_blank()) +
geom_text(aes(y = x/3 +
c(0, cumsum(x)[-length(x)]),
label = piepercent), size = 6)

#饼状图周围有数字,我们删掉它
#这里我们需要使用scales包
#调用scales包
library(scales)
#出图
pie + theme_minimal() +
theme(axis.text.x=element_blank(),
axis.title.x = element_blank(),
axis.title.y = element_blank()) +
geom_text(aes(y = x/3 + c(0, cumsum(x)[-length(x)]),
label = piepercent), size=5)

3D饼状图 plotrix包pie3D()函数
# 载入 plotrix
library(plotrix)
pie3D(x,labels = labels, explode = 0.1, main = "不同类型植被占比(3D图)")

#进一步美化
pie3D(x,labels = piepercent, explode = 0.1, main = "不同类型植被占比(3D图)")
#添加标签
legend("topright", c("乔木", "灌木", "草本"), cex = 1,
fill = rainbow(length(x)))

参考文献
[1] Robert I. Kabacoff (著). R语言实战(高涛/肖楠/陈钢 译). 北京: 人民邮电出版社.
[2] https://www.runoob.com/r/r-pie-charts.html
[3] https://zhuanlan.zhihu.com/p/80415566
网友评论