十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

R 绘图 - 饼图:从基础到进阶的完整指南

R 绘图 - 饼图:从基础到进阶的完整指南 1. 引言饼图Pie Chart是数据可视化中最直观的图表类型之一它通过扇形的角度或面积来展示各部分在整体中所占的比例。在 R 语言中饼图的绘制方法多样既可以使用基础绘图系统也可以借助 ggplot2 等高级绘图包实现更美观、更灵活的定制。本文将系统介绍 R 中绘制饼图的多种方法并提供丰富的可运行代码实例。2. 基础饼图pie() 函数R 基础绘图系统提供了pie()函数用于快速绘制饼图。其基本语法如下pie(x, labels names(x), edges 200, radius 0.8, clockwise FALSE, init.angle if (clockwise) 90 else 0, col NULL, border NULL, main NULL)其中x是一个数值向量labels用于指定每个扇区的标签col用于设置颜色main用于添加标题。下面是一个最简单的饼图示例# 示例数据某班级学生最喜欢的科目 subjects - c(数学 12, 语文 8, 英语 10, 物理 6, 化学 4) 绘制基础饼图 pie(subjects, main 学生最喜欢的科目分布, col c(lightblue, lightgreen, lightyellow, lightpink, lightcyan))运行上述代码后R 会生成一个带有默认标签和标题的饼图。需要注意的是pie()函数默认按数据向量的顺序绘制扇区从 3 点钟方向开始逆时针排列。3. 自定义饼图外观基础饼图虽然简单但外观较为朴素。我们可以通过调整参数来美化图表例如设置扇区边框颜色、调整起始角度、控制绘制方向等。3.1 设置边框与起始角度# 设置边框颜色和起始角度 pie(subjects, main 带边框的饼图, col c(steelblue, tomato, gold, mediumseagreen, orchid), border white, init.angle 90, # 从 12 点钟方向开始 clockwise TRUE) # 顺时针排列3.2 添加百分比标签默认的饼图标签只显示名称不显示比例。我们可以通过计算百分比来生成更丰富的标签# 计算百分比 pct - round(subjects / sum(subjects) * 100, 1) labels - paste(names(subjects), (, pct, %), sep ) 绘制带百分比标签的饼图 pie(subjects, labels labels, main 学生最喜欢的科目分布含百分比, col c(steelblue, tomato, gold, mediumseagreen, orchid), border white, cex 0.9) # 调整标签字体大小4. 使用 ggplot2 绘制饼图ggplot2 是 R 中最流行的数据可视化包虽然它没有直接提供geom_pie()函数但可以通过coord_polar()将条形图转换为饼图。这种方法更加灵活便于后续的美化和定制。4.1 安装并加载 ggplot2# 安装 ggplot2如果尚未安装 # install.packages(ggplot2) 加载 ggplot2 library(ggplot2)4.2 基础 ggplot2 饼图# 准备数据框 df - data.frame( subject c(数学, 语文, 英语, 物理, 化学), count c(12, 8, 10, 6, 4) ) 绘制饼图 ggplot(df, aes(x , y count, fill subject)) geom_bar(stat identity, width 1) coord_polar(theta y) labs(title 学生最喜欢的科目分布ggplot2) theme_void() # 去除背景和坐标轴4.3 添加百分比标签# 计算百分比 df$pct - round(df$count / sum(df$count) * 100, 1) df$label - paste(df$subject, (, df$pct, %), sep ) 绘制带标签的饼图 ggplot(df, aes(x , y count, fill subject)) geom_bar(stat identity, width 1) coord_polar(theta y) geom_text(aes(label label), position position_stack(vjust 0.5), size 4) labs(title 学生最喜欢的科目分布含百分比标签) theme_void()5. 环形图Donut Chart环形图是饼图的一种变体中间有一个空心圆视觉效果更加现代。在 ggplot2 中只需在饼图的基础上添加一个空白的中心圆即可实现。# 绘制环形图 ggplot(df, aes(x 2, y count, fill subject)) geom_bar(stat identity, width 1) coord_polar(theta y) geom_text(aes(label label), position position_stack(vjust 0.5), size 4) xlim(0.5, 2.5) # 通过限制 x 轴范围制造空心效果 labs(title 学生最喜欢的科目分布环形图) theme_void()在上面的代码中xlim(0.5, 2.5)将 x 轴的范围限制在 0.5 到 2.5 之间使得条形图只占据外圈部分从而形成环形效果。6. 3D 饼图虽然 3D 饼图在数据可视化领域存在一定争议因为 3D 透视会扭曲比例感知但在某些场景下仍然有展示需求。R 中可以使用plotrix包的pie3D()函数绘制 3D 饼图。# 安装并加载 plotrix 包 # install.packages(plotrix) library(plotrix) 绘制 3D 饼图 pie3D(subjects, main 学生最喜欢的科目分布3D 饼图, col c(steelblue, tomato, gold, mediumseagreen, orchid), explode 0.1, # 扇区分离程度 labels paste(names(subjects), pct, %, sep ), labelcex 0.8)其中explode参数控制扇区之间的分离距离labelcex用于调整标签字体大小。7. 多面板饼图当需要对比多组数据的构成时可以使用par(mfrow)将多个饼图排列在同一画布上。# 两组示例数据 class_a - c(数学 12, 语文 8, 英语 10, 物理 6, 化学 4) class_b - c(数学 10, 语文 9, 英语 12, 物理 5, 化学 6) 设置 1 行 2 列的布局 par(mfrow c(1, 2)) 绘制两个饼图 pie(class_a, main A 班科目分布, col c(steelblue, tomato, gold, mediumseagreen, orchid)) pie(class_b, main B 班科目分布, col c(steelblue, tomato, gold, mediumseagreen, orchid)) 恢复默认布局 par(mfrow c(1, 1))8. 使用 plotly 绘制交互式饼图如果希望饼图具备交互能力如悬停显示数值、点击高亮等可以使用plotly包。# 安装并加载 plotly 包 # install.packages(plotly) library(plotly) 绘制交互式饼图 plot_ly(df, labels ~subject, values ~count, type pie, textinfo labelpercent, title 学生最喜欢的科目分布交互式)运行上述代码后会在 RStudio 的 Viewer 窗口或浏览器中打开一个可交互的饼图鼠标悬停在扇区上即可查看详细数值和百分比。9. 饼图使用建议饼图虽然直观但在实际使用中需要注意以下几点扇区数量不宜过多当类别超过 6 个时饼图的可读性会显著下降建议改用条形图。避免 3D 效果3D 透视会扭曲扇区的视觉面积影响读者对比例的准确判断。标注百分比在扇区上标注具体数值或百分比可以帮助读者更准确地理解数据。对比多组数据时慎用如果需要对比多组数据的构成使用堆叠条形图或分面条形图通常更清晰。10. 总结本文系统介绍了 R 中绘制饼图的多种方法包括基础pie()函数、ggplot2 饼图与环形图、3D 饼图、多面板饼图以及 plotly 交互式饼图。每种方法都配有完整的可运行代码示例读者可以根据实际需求选择合适的方式。在实际项目中建议优先使用 ggplot2 或 plotly因为它们提供了更强大的定制能力和更好的视觉效果。
返回列表