R 绘图 – 散点图(建议收藏)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观
在数据分析与可视化领域,散点图(Scatter Plot)是最基础且功能强大的工具之一。它通过二维坐标系中的点阵分布,直观展示两个变量之间的关系,帮助用户快速发现数据中的趋势、异常值或潜在模式。对于编程初学者和中级开发者来说,掌握在 R 绘图 – 散点图 的绘制技巧,不仅能提升数据探索效率,还能为后续学习复杂图表(如热力图、三维图)打下坚实基础。本文将从基础语法到高级定制,结合实际案例,手把手教你如何用 R 语言绘制出专业级的散点图。
二级标题:散点图的核心概念与应用场景
什么是散点图?
散点图的核心是通过点的坐标位置(x, y)反映两个变量的数值关系。例如:
- 变量间的关系:分析身高与体重的关系,观察是否随身高增加体重也增加。
- 异常值检测:在金融交易数据中,发现偏离正常范围的异常交易点。
- 分组对比:用不同颜色区分不同组别(如男性、女性),比较两组变量的分布差异。
R 中的散点图工具
R 语言提供了多种绘图包,其中最常用的是 base R 和 ggplot2。
- Base R:内置绘图函数(如
plot()
),适合快速生成简单图表。 - ggplot2:基于“语法式绘图”理念,支持高度定制化,适合复杂图表设计。
比喻:
Base R 好比“速写本”,适合快速勾勒草图;而 ggplot2 好比“专业画布”,允许逐层添加细节,最终呈现精细作品。
二级标题:基础散点图绘制(Base R)
步骤 1:准备数据
假设我们有两组数据:
x_values <- rnorm(50, mean = 50, sd = 10)
y_values <- x_values + rnorm(50, mean = 0, sd = 5)
data <- data.frame(X = x_values, Y = y_values)
步骤 2:绘制基础散点图
使用 plot()
函数,参数详解:
plot(data$X, data$Y,
main = "基础散点图示例",
xlab = "X 轴变量",
ylab = "Y 轴变量",
pch = 16, # 点形状(16 表示实心圆)
col = "blue" # 点颜色
)
关键参数说明:
| 参数 | 作用描述 | 常用值示例 |
|--------|---------------------------|---------------------|
| pch
| 控制点形状 | 1(空心圆)、16(实心圆)、21-25(带边框的形状) |
| col
| 控制颜色 | "red"、"green"、十六进制值(如 "#FF0000") |
| main
| 图表标题 | 字符串 |
二级标题:进阶:用 ggplot2 定制散点图
安装与加载 ggplot2
install.packages("ggplot2")
library(ggplot2)
步骤 1:构建基础框架
ggplot(data, aes(x = X, y = Y)) +
geom_point()
ggplot()
:初始化绘图对象,指定数据源和坐标轴变量。geom_point()
:添加散点图图层。
步骤 2:添加标题与坐标轴标签
ggplot(data, aes(X, Y)) +
geom_point() +
labs(
title = "ggplot2 散点图示例",
x = "X 轴变量",
y = "Y 轴变量"
)
步骤 3:自定义点的视觉属性
颜色与形状
ggplot(data, aes(X, Y, color = "蓝色", shape = "圆形")) +
geom_point(size = 3) +
scale_color_manual(values = "#1f77b4") # 自定义颜色
按分组着色
若数据包含分组变量(如 Group
),可直接映射到颜色:
data$Group <- sample(c("A", "B"), 50, replace = TRUE)
ggplot(data, aes(X, Y, color = Group)) +
geom_point() +
scale_color_manual(values = c("red", "green"))
二级标题:高级技巧:趋势线与分面
添加趋势线(线性回归)
ggplot(data, aes(X, Y)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE) # lm 表示线性回归,se 控制是否显示置信区间
按分组分面(Faceting)
将数据按某个变量拆分为多个小图:
ggplot(data, aes(X, Y)) +
geom_point() +
facet_grid(. ~ Group) # 水平分面,按 Group 列分列
二级标题:实战案例:分析汽车数据(mtcars 数据集)
案例目标
分析汽车的 马力(hp) 与 油耗(mpg) 之间的关系。
步骤 1:加载数据并预览
data(mtcars)
head(mtcars[, c("hp", "mpg")])
步骤 2:绘制基础散点图
ggplot(mtcars, aes(hp, mpg)) +
geom_point() +
labs(
title = "汽车马力与油耗关系分析",
x = "马力(hp)",
y = "每加仑英里数(mpg)"
)
步骤 3:添加回归线与分组
按汽车类型(如“自动变速器” vs “手动变速器”)着色:
ggplot(mtcars, aes(hp, mpg, color = factor(am))) +
geom_point(size = 3) +
geom_smooth(method = "lm", se = FALSE) +
labs(
color = "变速器类型",
title = "不同变速器类型汽车的油耗与马力关系"
) +
scale_color_discrete(labels = c("自动", "手动"))
分析结论:
- 散点图显示马力越高,油耗(mpg)越低,符合预期。
- 手动变速器(红色)的油耗普遍高于自动变速器(蓝色),可能与样本数据中手动车型的高马力分布有关。
二级标题:常见问题与解决方案
问题 1:点重叠导致信息丢失
解决方案:
- 调整透明度:
geom_point(alpha = 0.5)
- 使用大小变量:
aes(size = 另一个变量)
- 使用 hex 密度图:
geom_hex()
问题 2:坐标轴范围不合适
解决方案:
coord_cartesian(xlim = c(0, 300), ylim = c(10, 40)) # 手动设置坐标范围
二级标题:结论
本文通过 R 绘图 – 散点图 的基础语法、ggplot2 定制技巧和实际案例,系统讲解了如何从数据到图表的全流程。掌握这些技能后,你不仅能快速探索变量间的关联,还能通过可视化传达清晰的洞察。建议读者尝试以下练习:
- 将案例中的
mtcars
数据替换为自己的数据集; - 探索
ggplot2
的theme()
函数,自定义图表背景与字体; - 尝试添加第三维度(如点的大小表示重量)。
数据可视化是沟通的桥梁,而 散点图 正是这座桥梁中最稳固的一块基石。通过持续练习,你将能用 R 语言绘制出更复杂、更具表现力的图表。