R 语言实战指南:如何创建与定制专业级饼图

在数据可视化的世界里,选择一种能够直观展示部分与整体关系的图表至关重要。今天,我们将深入探讨 R 语言中最基础却也最经典的统计图形之一——饼图。虽然饼图在学术界有时备受争议,但不可否认的是,在处理诸如市场份额、预算分配或人口构成等“部分占整体”的数据时,它依然是最直观的表达方式。

在这篇文章中,我们将一起探索如何使用 R 语言的基础绘图系统来生成各种各样的饼图。从最基础的图形绘制,到添加百分比标签、自定义调色板,甚至是创建具有立体感的 3D 饼图,我们将通过一系列实战案例,帮助你全面掌握这一技能。

饼图的核心概念与基础语法

首先,让我们简单回顾一下什么是饼图。饼图是一种圆形的统计图形,它被分割成若干个扇区,每个扇区的大小对应于该类别在数据中的相对大小或频率。在 R 语言中,我们可以直接使用基础安装包中自带的 pie() 函数来创建它。

在开始写代码之前,我们需要了解 pie() 函数的核心语法结构,这将是我们后续所有定制化操作的基础。

#### 语法核心

pie(x, labels, radius, main, col, clockwise, ...)

#### 关键参数解析

为了让你更清楚如何控制图表的每一个细节,我们详细解读一下这些参数:

  • INLINECODEa656f36e: 这是最关键的输入数据,通常是一个数值向量。注意,INLINECODE9a0f102a 必须是正数,饼图会根据数值的相对比例(而非绝对值)来切割扇区。
  • labels: 这是一个字符向量,用于标记每个扇区的名称。如果不提供,R 将默认使用索引或数值作为标签。
  • radius: 定义饼图的半径大小。默认值通常是 0.8 左右,你可以调整它(例如 0.5 或 1.0)来改变图表在画布上的缩放比例。
  • main: 即图表的主标题,相当于整个图表的名字。
  • INLINECODE079837aa: 填充颜色的向量。你可以为每个扇区指定具体的颜色,或者使用 R 的颜色生成函数(如 INLINECODE3a36cd7c)。
  • INLINECODEe27cf365: 一个逻辑值(INLINECODEfe9e4a86 或 INLINECODE5045f627)。默认情况下,R 的饼图是逆时针绘制的(从 3 点钟方向开始)。如果你希望数据顺时针排列,请将其设置为 INLINECODE62a36e27。
  • edges: 这是一个稍微高级一点的参数,定义了圆的平滑度(多边形的边数)。默认值通常足够圆滑,但在极高分辨率输出时可以调整。

1. 创建你的第一个 R 饼图

让我们从最简单的例子开始。假设我们有一组关于不同城市的数据,我们想要直观地展示它们之间的比例关系。

#### 示例 1.1:极简主义饼图

在这个例子中,我们将只提供数据和标签,其余的全部交给 R 的默认设置。

# 准备数据:模拟四个城市的数值数据
data_values <- c(23, 56, 20, 63)

# 准备标签:对应的城市名称
data_labels <- c("Mumbai", "Pune", "Chennai", "Bangalore")

# 绘制饼图
pie(x = data_values, 
    labels = data_labels)

输出解读:

当你运行这段代码时,R 会弹出一个绘图窗口。你会看到一个圆形的图表,被切割成四个扇区。每个扇区的大小精确对应了 data_values 中的比例。虽然这个图表很清晰,但它看起来有点“朴素”。在专业报告中,我们通常需要更多的视觉信息。

#### 示例 1.2:为图表注入色彩与标题

为了让图表更具可读性,我们可以通过添加标题和颜色来增强视觉效果。R 语言提供了一个非常方便的函数 rainbow(),它可以根据数据量的多少自动生成彩虹色谱。

# 1. 准备数据(保持不变)
data_values <- c(23, 56, 20, 63)
data_labels <- c("Mumbai", "Pune", "Chennai", "Bangalore")

# 2. 计算彩虹色
# rainbow(n) 会生成 n 个连续的颜色,非常适合分类数据
chart_colors <- rainbow(length(data_values))

# 3. 绘制带有标题和颜色的饼图
pie(x = data_values, 
    labels = data_labels, 
    main = "城市分布比例图",     # 添加主标题
    col = chart_colors,          # 应用彩虹色填充
    border = "white",            # 添加白色边框,使切片分隔更清晰
    clockwise = TRUE)            # 设置为顺时针绘制,符合阅读习惯

实用见解:

在添加颜色时,尽量选择对比度高且色盲友好的配色方案(虽然 INLINECODEd2abe1c0 不是最好的色盲友好方案,但它最容易上手)。在这里,我额外添加了 INLINECODE21f1ee63 参数,这是一个小技巧,它能让每个扇区之间有一条白线分隔,比默认的黑线看起来更现代、更干净。

2. 进阶技巧:百分比与图例

仅仅展示标签是不够的,读者通常关心具体的百分比。此外,当标签较长或扇区较小时,直接将标签放在饼图上可能会显得拥挤。这时候,使用图例是一个明智的选择。

#### 示例 2.1:添加百分比标签

我们需要手动计算每个切片的百分比,因为 pie() 函数不会自动计算这个。

data_values <- c(23, 56, 20, 63)
data_labels <- c("Mumbai", "Pune", "Chennai", "Bangalore")

# 步骤 1: 计算百分比
# 逻辑:(单个值 / 总和) * 100,并保留 1 位小数
plot_labels <- round(100 * data_values / sum(data_values), 1)

# 步骤 2: 将百分比符号粘合到数值上(可选,或者作为图例)
# 这里我们直接将数值转换为字符串标签用于绘图
plot_labels_text <- paste(plot_labels, "%", sep = "")

# 步骤 3: 绘制饼图
pie(x = data_values, 
    labels = plot_labels_text,   # 此时标签显示的是百分比
    main = "城市数据占比分析", 
    col = rainbow(length(data_values)),
    clockwise = TRUE)

#### 示例 2.2:将标签移至图例(专业做法)

这种做法在专业报表中非常常见。饼图本体保持干净(只显示颜色或百分比),详细的类别名称通过右侧的图例来说明。

“INLINECODEb1bc0bac`INLINECODE502e4642pie3DINLINECODE30b90c94explodeINLINECODE123afd24pie()INLINECODE19910e10pie(x, labels, col)INLINECODE4fa6ab24pie()INLINECODE09c2111eround(x/sum(x))INLINECODE97d447deRColorBrewerINLINECODEb5bfcfd3legendINLINECODEef0a8e5eplotrix::pie3DINLINECODE769d3754explodeINLINECODEfa618876shadeINLINECODEd4e21cedpar()INLINECODE1efdee48mfrow`),在一个画布上同时绘制多个不同风格的饼图进行对比。

希望这篇文章能帮助你在下一次数据分析中,绘制出既专业又美观的 R 饼图!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/42914.html
点赞
0.00 平均评分 (0% 分数) - 0