R 绘图 – 饼图:用数据讲故事的视觉艺术
在数据分析的世界里,图表是让数字“开口说话”的桥梁。而饼图,正是其中一种经典且直观的表达方式。它像一块切好的披萨,每一小块代表一个类别,大小直观反映其在整体中的占比。对于初学者来说,掌握 R 绘图 – 饼图,不仅能快速呈现分类数据的分布,还能为后续的数据汇报、报告撰写打下坚实基础。
R 语言作为统计分析与可视化的利器,内置了 pie() 函数,让我们能轻松绘制出漂亮的饼图。本文将带你从零开始,逐步掌握 R 绘图 – 饼图的核心技巧,无论是简单的数据展示,还是带颜色、标签、图例的高级样式,你都能轻松驾驭。
从零开始:绘制最基础的饼图
我们先从最简单的例子入手。假设你是一名市场专员,需要展示某公司 2023 年各产品线的销售额占比。
sales <- c(300, 200, 150, 100, 50)
product_names <- c("智能手机", "平板电脑", "智能手表", "耳机", "配件")
pie(sales, labels = product_names)
这段代码的作用是:
c()是 R 中创建向量的函数,这里将五个数值存为一个数值向量;labels = product_names指定每个扇形的标签,即显示的文字;pie()函数接收数据向量和标签,自动生成饼图。
运行后,你会看到一个基本的饼图,每个扇形对应一个产品线,大小与销售额成正比。注意:饼图适合类别数量较少(通常不超过 6 个)的情况,过多的扇形会让图表变得混乱。
优化视觉:添加颜色与标题
基础饼图虽然能看,但视觉上略显单调。我们可以通过添加颜色和标题,让图表更具表现力。
colors <- c("#FF6B6B", "#4ECDC4", "#45B7D1", "#96CEB4", "#FFEAA7")
pie(sales,
labels = product_names,
main = "2023 年各产品线销售额占比",
col = colors)
这里的关键点是:
col = colors参数用于设置每个扇形的颜色;main = "..."设置图表的主标题,让读者一眼知道图表主题;- 颜色使用十六进制代码,可以精确控制视觉效果,提升专业感。
小贴士:颜色搭配很重要。建议使用对比度高但不刺眼的颜色,避免使用过于鲜艳或相近的颜色,以免造成视觉疲劳。
增强可读性:添加百分比标签
饼图的魅力在于直观显示“占比”。在实际应用中,我们往往希望在每个扇形上显示具体的百分比数值。
percentages <- round(sales / sum(sales) * 100, 1) # 保留一位小数
label_text <- paste(product_names, "(", percentages, "%)", sep = "")
pie(sales,
labels = label_text,
main = "2023 年各产品线销售额占比",
col = colors)
说明:
sum(sales)求所有销售额的总和;sales / sum(sales) * 100将每个值转换为百分比;round(..., 1)保留一位小数,避免数字过长;paste()函数用于拼接字符串,例如将 "智能手机 (30.0%)" 合并成一个字符串;sep = ""表示拼接时不加额外分隔符。
这样,每个扇形不仅显示名称,还附带精确的百分比,信息量大幅提升。
调整布局:使用饼图的“外扩”功能
当饼图中某些扇形太小,标签可能重叠或难以阅读。这时,我们可以使用 radius 参数来控制饼图的“大小”,或通过 clockwise 与 startang 调整起始方向。
pie(sales,
labels = label_text,
main = "2023 年各产品线销售额占比",
col = colors,
radius = 0.8,
clockwise = TRUE,
startang = 90)
参数说明:
radius = 0.8:控制饼图的半径,值越小,图形越紧凑;clockwise = TRUE:设置绘制顺序为顺时针(默认是逆时针);startang = 90:设置起始角度为 90 度(即从正上方开始),这在某些文化中更符合阅读习惯。
通过这些微调,可以让饼图更美观、更符合用户习惯。
高级技巧:使用 legend() 添加图例
当饼图类别较多,或颜色区分度不高时,仅靠颜色可能难以识别。此时,添加图例是提升可读性的有效手段。
pie(sales,
labels = NA, # 不显示扇形标签
main = "2023 年各产品线销售额占比",
col = colors)
legend("right",
legend = product_names,
fill = colors,
cex = 0.8,
bty = "n") # cex 控制文字大小,bty = "n" 去除图例边框
关键点:
labels = NA表示不显示饼图内部标签,为图例腾出空间;legend()函数用于创建图例;fill = colors指定图例颜色与饼图一致;cex = 0.8调整图例文字大小;bty = "n"去除图例边框,使视觉更简洁。
这种“饼图 + 图例”组合,特别适合用于报告、PPT 或网页展示,信息清晰,专业度高。
实战案例:比较两个年份的销售结构
现在我们来做一个更实际的案例:比较 2022 年与 2023 年各产品线的销售占比变化。
sales_2022 <- c(250, 220, 160, 110, 40)
sales_2023 <- c(300, 200, 150, 100, 50)
par(mfrow = c(1, 2)) # 设置图形窗口为 1 行 2 列
pie(sales_2022,
labels = paste(product_names, "(", round(sales_2022/sum(sales_2022)*100, 1), "%)", sep = ""),
main = "2022 年销售占比",
col = colors,
radius = 0.8,
startang = 90)
pie(sales_2023,
labels = paste(product_names, "(", round(sales_2023/sum(sales_2023)*100, 1), "%)", sep = ""),
main = "2023 年销售占比",
col = colors,
radius = 0.8,
startang = 90)
par(mfrow = c(1, 1))
解释:
par(mfrow = c(1, 2))将绘图区域划分为左右两个子图;- 两个
pie()函数分别绘制两年的数据; par(mfrow = c(1, 1))用于恢复默认布局,避免后续绘图受影响。
这种并列对比方式,能清晰展现结构变化,例如“智能手机”占比上升,“配件”占比下降,一目了然。
常见问题与最佳实践
在实际使用 R 绘图 – 饼图时,有几个常见误区值得提醒:
| 问题 | 建议 |
|---|---|
| 饼图类别超过 6 个 | 改用条形图,避免扇形过多导致混乱 |
| 颜色过于相近 | 使用配色工具(如 ColorBrewer)选择对比度高的配色方案 |
| 标签重叠 | 使用 radius 缩小饼图,或启用 legend() 分离标签 |
| 忽略数据总和 | 确保数据总和正确,避免百分比加起来不等于 100% |
最佳实践:饼图不是万能的。它适合展示“部分占整体”的关系,但不适合比较绝对值或趋势。如果需要比较多个时间点的数据,条形图或堆叠柱状图可能更合适。
结语
R 绘图 – 饼图,看似简单,实则蕴含丰富的表达力。从基础绘制到高级美化,每一步都在提升你的数据表达能力。掌握它,不仅能让你的分析报告更专业,还能在团队协作中脱颖而出。
无论是市场分析、用户画像,还是内部汇报,饼图都是一个不可或缺的工具。只要多加练习,你也能轻松做出既美观又准确的图表。
现在,不妨打开 RStudio,动手试试这些代码,把你的数据变成一幅幅会说话的“视觉故事”。