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 Rggplot2

  • 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 定制技巧和实际案例,系统讲解了如何从数据到图表的全流程。掌握这些技能后,你不仅能快速探索变量间的关联,还能通过可视化传达清晰的洞察。建议读者尝试以下练习:

  1. 将案例中的 mtcars 数据替换为自己的数据集;
  2. 探索 ggplot2theme() 函数,自定义图表背景与字体;
  3. 尝试添加第三维度(如点的大小表示重量)。

数据可视化是沟通的桥梁,而 散点图 正是这座桥梁中最稳固的一块基石。通过持续练习,你将能用 R 语言绘制出更复杂、更具表现力的图表。

最新发布