手把手教学系列之R语言绘图——饼图

1.安装需要的包

如果有的话就不用安装了

r 复制代码
# 安装包
install.packages("ggplot2")
install.packages("dplyr")

2.导入需要的包

r 复制代码
# 导入包
library(ggplot2)
library(dplyr)

3.创建数据

这一步很重要,只有我们得到正确的数据格式才可以正确的画图。

下面的两种方法,第一种是直接在R语言中创建数据,第二种是对已有的数据进行修改格式,选择适合自己的一种即可。

3.1 创建数据

r 复制代码
# 创建数据框
data <- data.frame(
  category = c("A", "B", "C", "D"),
  percentage = c(20, 30, 40, 10)
)

# category列为饼图中每一部分的名称
# percentage是对应的每一部分的百分比

查看数据格式

r 复制代码
head(data)

3.2 导入数据

3.2.1 准备文件

没有数据的可以直接自己创建一个,有的可以跳过直接读取文件

test_pie.csv

这个文件就是按照每个category的个数占得百分比绘图

3.2.2 读取文件

r 复制代码
# 读取文件
data_test <- read.csv('E:/个人主页/R语言/饼图/导入数据/test_pie.csv',header = TRUE)

查看数据格式

r 复制代码
head(data_test)

3.2.3 计算每个category的百分比:每个类别的计数/总行数

r 复制代码
## 计算每个类别的计数
counts <- table(data_test$category)

## 总行数
total <- nrow(data_test)

## 计算百分比
percentage <- counts / total * 100

3.2.4 转换为数据框

r 复制代码
data <- as.data.frame(percentage)
colnames(data) <- c("category", "percentage")
print(data)

4.绘制饼图

4.1 绘制基础饼图

最基础的饼图。

按照数据的每一行顺序进行逆时针绘制的,但是官方教程里面说是默认顺时针的,这一点比较矛盾,没太懂其中的逻辑。

r 复制代码
# 最基础的饼图
# 按照数据的每一行顺序进行逆时针绘制的,但是官方教程里面说是默认顺时针的,这一点比较矛盾,没太懂其中的逻辑
p <- ggplot(data,aes(x = "",y = percentage,fill = category)) + 
  geom_bar(stat="identity", width=1, color="white") + #绘制柱状图
  coord_polar("y", start=0) + #设置环形
  theme_void() 
  
# 保存pdf格式
ggsave('pie_base.pdf', plot = p, width = 6, height = 4)
 
# 展示饼图
print(p)

4.2 绘制加category标签的饼图

4.2.1 添加标签的位置信息

r 复制代码
# 加标签
# 加标签时,最棘手的是确定标签的位置
# 在使用ggplot2画扇形图时,是在画柱形图的基础上,设置为圆环状;
# 因此我们需要确保标签的位置在扇形的中间;
# 以本数据为例,需要先按照category排序,保证顺序正确;
# 因为扇形图中是按照百分比排序的,也就是A占百分之20,就需要标签的位置在10的位置,也就是20的一半的位置;
# 所以这里使用cumsum函数,这个函数是累计叠加数据,也就是D的位置就是10 - 10 * 0.5、C的位置就是D(10) + C(40) - C(40) * 0.5

# 数据按照category排序
# 设置ypos位置
data <- data %>% 
  arrange(desc(category)) %>% #排序
  mutate(ypos = cumsum(percentage)- 0.5*percentage ) #设置标签的位置信息

4.2.2 查看数据结构

r 复制代码
head(data)

4.2.3 绘制标签饼图

r 复制代码
# 绘制基础标签饼图
p_label <- ggplot(data, aes(x="", y=percentage, fill=category)) +
  geom_bar(stat="identity", width=1, color="white") + #绘制柱状图
  coord_polar("y", start=0) + #设置环形
  theme_void() + 
  geom_text(aes(y = ypos, label = category), color = "white", size=8) + #加上标签
  scale_fill_brewer(palette="Set1") #设置颜色

# 保存pdf格式
ggsave('pie_label.pdf', plot = p_label, width = 6, height = 4)

# 展示饼图
print(p_label)

4.3 绘制特定颜色的饼图

scale_fill_manual函数直接特定设置即可

r 复制代码
# 设置颜色
p_color <- ggplot(data, aes(x="", y=percentage, fill=category)) +
  geom_bar(stat="identity", width=1, color="white") + #绘制柱状图
  coord_polar("y", start=0) + #设置环形
  theme_void() + 
  geom_text(aes(y = ypos, label = category), color = "black", size=8) + #加上标签
  scale_fill_manual(values = c("A" = "#5378AC", "B" = "#FFF2CD", "C" = "#D3E2B7", "D" = "#D26B66")) #每个种类设置特定的颜色

# 保存pdf格式
ggsave('pie_color.pdf', plot = p_color, width = 6, height = 4)

# 展示饼图
print(p_color)

4.4 绘制加上百分比的饼图

geom_text函数中label参数中加上percentage即可

r 复制代码
# 加上百分比
p_percentage <- ggplot(data, aes(x="", y=percentage, fill=category)) +
  geom_bar(stat="identity", width=1, color="white") + #绘制柱状图
  coord_polar("y", start=0) + #设置环形
  theme_void() + 
  geom_text(aes(y = ypos, label = sprintf("%s: %d%%", category, percentage)), color = "black", size=4) + #加上category和percentage标签
  scale_fill_manual(values = c("A" = "#5378AC", "B" = "#FFF2CD", "C" = "#D3E2B7", "D" = "#D26B66")) #每个种类设置特定的颜色

# 保存pdf格式
ggsave('pie_percentage.pdf', plot = p_percentage, width = 6, height = 4)

# 展示饼图
print(p_percentage)

觉得不错的可以给个赞和关注,谢谢!

相关推荐
B站计算机毕业设计超人1 天前
计算机毕业设计Python+Neo4j中华古诗词可视化 古诗词智能问答系统 古诗词数据分析 古诗词情感分析 PyTorch Tensorflow LSTM
pytorch·python·深度学习·机器学习·知识图谱·neo4j·数据可视化
B站计算机毕业设计超人1 天前
计算机毕业设计Python+大模型斗鱼直播可视化 直播预测 直播爬虫 直播数据分析 直播大数据 大数据毕业设计 机器学习 深度学习
爬虫·python·深度学习·机器学习·数据分析·课程设计·数据可视化
FreedomLeo12 天前
Python数据分析NumPy和pandas(二十九、其他Python可视化工具)
python·数据分析·数据可视化·numpy和pandas
B站计算机毕业设计超人2 天前
计算机毕业设计Python+图神经网络考研院校推荐系统 考研分数线预测 考研推荐系统 考研爬虫 考研大数据 Hadoop 大数据毕设 机器学习 深度学习
爬虫·python·深度学习·机器学习·知识图谱·数据可视化·推荐算法
希艾席蒂恩3 天前
选择适合你的报表工具,山海鲸报表与Tableau深度对比
信息可视化·数据挖掘·数据分析·数据可视化·报表工具·免费软件
qingyunliushuiyu3 天前
智能数据分析系统-助力企业迈向数字化转型时代
数据分析·数据可视化·数据分析系统·智能数据分析系统·bi数据分析系统
RestCloud3 天前
ETLCloud支持的数据处理类型包括哪些?
数据库·数据分析·数据可视化
阡之尘埃3 天前
Python数据分析案例64——杭帮菜美食探索数据分析可视化
python·数据挖掘·数据分析·pandas·数据可视化·美食·杭帮菜
叫我:松哥3 天前
基于python的天气数据采集与可视化分析,对20个城市的天气适宜出行度分析
开发语言·爬虫·python·数据分析·matplotlib·数据可视化·天气