1. 气泡图:不只是三个点的故事
很多刚接触数据可视化的朋友,可能会觉得气泡图就是散点图的“豪华版”,无非是把点画大一点。我刚开始也这么想,直到有一次,我手头有一份数据,需要同时展示不同城市的GDP总量(用气泡大小)、人口增长率(用Y轴位置)、第三产业占比(用X轴位置),还想区分一下东、中、西部(用颜色)。当时我对着散点图琢磨了半天,怎么在一张图里塞下这么多信息?最后才恍然大悟,这不就是气泡图的“本职工作”嘛。
气泡图的核心魅力,就在于它能在一张二维平面上,优雅地承载四个甚至更多维度的信息。X轴和Y轴定位两个核心变量,气泡的大小直观反映第三个连续变量的数值,而气泡的颜色则可以编码第四个变量(通常是分类变量)。这比并列画好几张图要高效得多,能让读者一眼就抓住数据中复杂的关联模式。比如,在分析市场营销数据时,你可以用气泡图展示不同产品:X轴是市场份额,Y轴是客户满意度,气泡大小是销售额,颜色代表产品类别。一张图下来,哪个产品是“明星产品”(高份额、高满意度、大销售额),哪个是“问题产品”,一目了然。
ggplot2作为R语言里可视化领域的“王牌”,它画气泡图的逻辑非常清晰,就是基于它的核心哲学——“图形语法”。你不用去记一堆专门的“气泡图函数”,而是理解:气泡图本质上就是geom_point()几何对象,只不过我们把点的大小(size)和颜色(color或fill)映射到了数据中的变量上。这种思维方式一旦建立,你会发现调整和定制图表变得异常自由,完全不受固定模板的限制。接下来,我们就从零开始,一步步拆解如何用ggplot2打造一个既专业又美观的进阶气泡图。
2. 从零开始:构建你的第一个多维气泡图
理论说再多,不如动手画一张。我们先来准备一份模拟数据,这份数据会比简单的示例更贴近真实场景。假设我们正在分析某在线教育平台的数据,我们关心不同课程类别的情况。
# 清空环境,加载包
rm(list = ls())
library(ggplot2)
library(dplyr)
# 设置随机种子保证结果可复现
set.seed(2024)
# 创建一份模拟数据集
course_data <- data.frame(
course_category = rep(c("数据科学", "编程开发", "设计创意", "商业金融", "个人提升"), each = 8),
month = rep(1:8, times = 5), # 模拟8个月的数据
student_num = round(runif(40, 100, 5000)), # 学员人数,作为气泡大小
revenue = round(runif(40, 5000, 200000)), # 课程收入,作为Y轴
completion_rate = runif(40, 0.5, 0.95) # 课程完成率,作为X轴
)
# 查看数据前几行
head(course_data)
这份数据有5个维度:课程类别(分类)、月份(连续/分类皆可)、学员人数、收入、完成率。我们的目标是:用完成率和收入定位每个气泡,用学员人数决定气泡大小,用课程类别给气泡上色,而月份信息我们可以后续通过分面(facet)来展示。这是一个非常典型的多维数据可视化场景。
基础绘图命令非常简单,核心就是aes()(美学映射)里的设置:
p_basic <- ggplot(course_data, aes(x = completion_rate, # X轴:完成率
y = revenue, # Y轴:收入
size = student_num, # 大小:学员数
color = course_category)) + # 颜色:课程类别
geom_point(alpha = 0.7) # 添加点图层,并设置一定透明度防止重叠遮挡
p_basic
运行这行代码,一个基础的多维气泡图就诞生了。你会立刻看到,不同颜色的气泡分布在坐标系中,大小各异。这张图已经能告诉我们很多信息:比如,完成率高且收入也高的“明星课程”出现在哪里?学员数量庞大的课程,其收入和


1万+

被折叠的 条评论
为什么被折叠?



