R 绘图 – 饼图(建议收藏)

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 参数来控制饼图的“大小”,或通过 clockwisestartang 调整起始方向。

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,动手试试这些代码,把你的数据变成一幅幅会说话的“视觉故事”。