饼图
2018-09-03
2018-09-03
饼图是一种应用非常广泛的统计图形,是针对离散型变量的统计图,饼图多用于展示频率、占比等数值。
1 饼图绘制
library(readxl)
data=read_excel("D:/TASK/净水器建模(1月19日)副本1.xlsx")
freq = table(data$保修期) #查看保修期的频数
freq
##
## 1年 2年 3年 5年 无保修
## 592 67 162 22 168
通过数据结构显示得知:最高频数1年保修期的净水器为592个样本量,最低频数的保修期净水器为22个样本量。
piepercent<- paste(round(100*freq/sum(freq), 2), "%") # 将数据四舍五入保存为两位小数
par(mfrow=c(1,2)) # 设置画图为1*2的格式,可以显示两张图形。
pie1=pie(freq,main="净水器保修期分布占比图",col = rainbow(length(freq))) #绘制饼图#rainbow彩虹色调色板函数
pie1=pie(freq,labels = piepercent,main="净水器保修期分布百分比占比图",col = rainbow(length(freq)))#添加百分比
legend("topright",c("1年","2年","3年","5年","无保修"),cex=0.6,#添加图例
fill=rainbow(length(freq))) #调色板
观察左图可得知1年保修期净水器的频数最高,5年保修期的频数最低。
观察右图可知,1年保修期的净水器频数最高,占比为58.56%,5年保修期的净水器频数最低,占比为2.18%。
2 ggplot绘制饼图
library(ggplot2) # 加载包
dt = data.frame(A = c(48.6,26.3,7.73, 4.75,3.45),B = c("氧","硅","铝","铁","钙"))#建立数据框
dt = dt[order(dt$A, decreasing = TRUE),] ## 用 order() 让数据框的数据按 A 列数据从大到小排序
myLabel = as.vector(dt$B) ## 转成向量,否则图例的标签可能与实际顺序不一致
myLabel = paste(myLabel, "(", round(dt$A / 1, 2), "%)", sep = "") ## 用 round() 对结果保留两位小数
p = ggplot(dt, aes(x = "", y = A, fill = B)) + #创建坐标轴
geom_bar(stat = "identity") +
geom_bar(stat = "identity", width = 1) + #当width >= 1 时中心的杂点将消失
coord_polar(theta = "y") + # 把柱状图折叠成饼图(极坐标)
labs(x = "", y = "", title = "") + # 将横纵坐标的标签设为空
theme(axis.ticks = element_blank()) + # 将左上角边框的刻度去掉
theme(legend.title = element_blank(), legend.position = "left")+ ## 将图例标题设为空,并把图例方放在左边位置
scale_fill_discrete(breaks = dt$B, labels = myLabel)+ # 将原来的图例标签换成现在的myLabel
theme(axis.text.x = element_blank())+ ## 去掉饼图的外框上的数值,即去除原柱状图的X轴,把X轴的刻度文字去掉
geom_text(aes(y = A/2 + c(0, cumsum(A)[-length(A)]), x = sum(A)/20, label = myLabel), size = 5) # 在图中加上百分比:x 调节标签到圆心的距离, y 调节标签的左右位置
print(p) #显示饼图
利用ggplot包绘制饼图如上代码所示,利用地壳中最多的前五大化学元素进行饼图绘制,图形如上,观察得知氧所占百分比最高,为48.6%,钙所占的百分比最低,为3,45%。
3 饼环绘制
library(ggplot2)
ad = data.frame(type = c("氧", "硅", "铝", "铁","钙"),n = c(48.6,26.3,7.73, 4.75,3.45))#建立数据框
ad$fraction = ad$n / sum(ad$n)
ad$ymax = cumsum(ad$fraction)
ad$ymin = c(0, head(ad$ymax, n = -1))
ggplot(data = ad, aes(fill = type, ymax = ymax, ymin = ymin, xmax = 4, xmin = 3)) +
geom_rect(colour = "grey30", show_guide = FALSE) +
coord_polar(theta = "y") +
labs(x = "", y = "", title = "") +
xlim(c(0, 4)) +
theme_bw() +
theme(panel.grid=element_blank()) + ## 去掉白色外框
theme(axis.text=element_blank()) + ## 把图旁边的标签去掉
theme(axis.ticks=element_blank()) + ## 去掉左上角的坐标刻度线
theme(panel.border=element_blank()) + ## 去掉最外层的正方形边框
geom_text(aes(x = 3.5, y = ((ymin+ymax)/2), label = type))
由上图知,地壳中元素含量最多的为氧,依次是硅等元素。
4 3D饼图绘制
library("plotrix")
dt = data.frame(A = c(48.6,26.3,7.73, 4.75,3.45),B = c("氧","硅","铝","铁","钙"))#建立数据框
lp=pie3D(dt$A,labels=myLabel,main="地壳元素含量占比")
利用地壳中最多的前五大化学元素进行3D饼图绘制,图形如上,观察得知氧所占百分比最高,为48.6%,钙所占的百分比最低,为3,45%。
5 绘制扇形图
扇形图不但可以显示各类别的占比,而且可以很清楚地展示各类别的差异。绘制扇形图的函数为fan.plot函数,同时也是包含在plotrix包中,基本书写格式:
fan.plot(数值型向量名,labels=切片标签向量)
fan.plot(dt$A,labels=myLabel)
title(main="")
由上图知,观察得知氧所占百分比最高,为48.6%,钙所占的百分比最低,为3,45%。
6 本章汇总
参数 | 类别 | 功能 |
---|---|---|
readxl | 包 | 读取EXCEL数据包 |
par | 参数 | 设置画图格式 |
pie | 函数 | 绘制饼图 |
legend | 参数 | 设置字符向量 |
rainbow | 参数 | 调色板 |
ggplot2 | 包 | 图形的绘制 |
order | 函数 | 排序 |
plotrix | 包 | 3D图绘制 |
fan.plot | 函数 | 绘制扇形图 |