R语言饼图占比分析

饼图

饼图是一种应用非常广泛的统计图形,是针对离散型变量的统计图,饼图多用于展示频率、占比等数值。

1 饼图绘制
library(readxl)
data=read_excel("D:/TASK/净水器建模(1月19日)副本1.xlsx")
freq = table(data$保修期) #查看保修期的频数
freq


通过数据结构显示得知:最高频数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%。

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%。

猜你喜欢

转载自blog.csdn.net/tandelin/article/details/87887368