京公网安备 11010802034615号
经营许可证编号:京B2-20210330
散点图简介
散点图通常是用来表述两个连续变量之间的关系,图中的每个点表示目标数据集中的每个样本。
同时散点图中常常还会拟合一些直线,以用来表示某些模型。
绘制基本散点图
本例选用如下测试数据集:
绘制方法是首先调用ggplot函数选定数据集,并在aes参数中指明横轴纵轴。然后调用散点图函数geom_point()便可绘制出基本散点图。R语言示例代码如下:
# 基函数
ggplot(ah, aes(x = ageYear, y = heightIn)) +
# 散点图函数
geom_point()
:
基于颜色和点形对数据进行分组
本例选用如下测试数据集:
绘制方法是在基础散点图之上再在基函数的美学参数集里设置一个美学变量。可指定colour或者shape两种参数,分别将不同分组以不同颜色/点形表述。R语言示例代码(基于颜色分组)如下:
# 基函数:colour设置分组
ggplot(sah, aes(x = ageYear, y = heightIn, colour = sex)) +
# 散点图函数
geom_point()
运行结果:
R语言示例代码(基于点形分组)如下:
# 基函数:shape设置分组
ggplot(sah, aes(x = ageYear, y = heightIn, shape = sex)) +
# 散点图函数
geom_point()
运行结果:
说明:可自定义点形,共有大概36种点形可供选择。具体请参考R语言ggplot2手册。
映射连续型变量
本例选用如下测试数据集:
上一个示例中,映射到分组的变量是离散型变量。而对于除了横轴纵轴之外的连续型变量,也可以映射到散点图的色深和点大小上。R语言示例代码(绑定颜色)如下:
# 基函数:colour绑定连续变量
ggplot(sahw, aes(x = ageYear, y = heightIn, colour = weightLb)) +
# 散点图函数
geom_point()
运行结果:
R语言示例代码(绑定大小)如下:
# 基函数:size绑定连续变量
ggplot(sahw, aes(x = ageYear, y = heightIn, size = weightLb)) +
# 散点图函数
geom_point()
运行结果:
处理散点重叠
本例选用如下测试数据集:
如果图中的散点重叠现象比较严重,可以在散点图中设置散点的透明度来进行可视化。R语言示例代码如下:
# 基函数:size、colour分别绑定连续变量
ggplot(sahw, aes(x = ageYear, y = heightIn, size = weightLb, colour = sex)) +
# 散点图函数:alpha设置散点透明度
geom_point(alpha = .5) +
# 使散点的面积正比与变量值
scale_size_area() +
# 标尺函数:palette设置配色方案
scale_colour_brewer(palette = "Set1")
运行结果:
添加回归模型拟合线
本例选用如下测试数据集:
如果需要网散点图中添加回归模型拟合线,最主要是调用stat_smooth()函数。R语言示例代码如下:
# 基函数:sex绑定离散变量
ggplot(sah, aes(x = ageYear, y = heightIn, colour = sex)) +
# 散点图
geom_point() +
# 标尺函数:palette设置配色方案
scale_colour_brewer(palette = "Set1") +
# 拟合回归线段以及置信域(默认0.95/通过level参数可自定义)
geom_smooth()
运行结果:
线段为曲线是因为参与拟合模型为局部线性回归模型。往geom_smooth()函数中加入”method = lm”即可拟合经典线性回归。结果如下图:
添加自定义模型拟合线
本例选用如下测试数据集:
上面一小节展示了用全局/局部回归模型拟合样本点并展示拟合线段,它使用ggplot2提供的geom_smooth()函数自动拟合并完成绘制。
但在更多时候,我们会使用其他包的模型(非ggplot2内置模型)拟合。针对这种情况,我们需要自定义一个函数。该函数接受模型、横纵轴名、横轴范围、横轴样本点数量等参数,输出一个包含预测变量和预测值的数据框。R语言实现代码如下:
# 函数功能:输出模型预测结果
# 参数说明:
# model: 模型变量
# xvar: 预测变量集
# yvar: 实际变量集
# xrange: 预测变量取值范围
# samples: 预测变量个数
# 函数输出:实际值 - 预测值数据集
predictvals = function(model, xvar, yvar, xrange = NULL, samples = 100, ...) {
# 模型为lm/glm/loess其中一种的话可自动生成xrange
if (is.null(xrange)) {
if (any(class(model) %in% c("lm", "glm")))
xrange = range(model$model[[xvar]])
else if (any(class(model) %in% "loess"))
xrange = range(model$x)
}
# 生成并返回实际值 - 预测值数据集
newdata = data.frame(x = seq(xrange[1], xrange[2], length.out = samples))
names(newdata) = xvar
newdata[[yvar]] = predict(model, newdata = newdata, ...)
newdata
}
在使用其他模型建模好之后,将新的模型等各参数传递进上述函数,便得到预测结果数据集。最后将新的数据集输出为折线图即可。
下面展示一个略微复杂的例子,它将数据集根据不同性别分为两组,分别建立回归模型并绘制其拟合线。R语言实现代码如下:
# 建模函数:在这里设置模型
make_model = function(data) {
loess(heightIn ~ ageYear, data)
}
# 按性别切割数据集并返回模型列表
models = dlply(sah, "sex", .fun = make_model)
# 对不同数据集(男/女)进行预测
predvals = ldply(models, .fun = predictvals, xvar = "ageYear", yvar ="heightIn")
# 绘制数据集散点图以及模型拟合线
ggplot(sah, aes(x = ageYear, y = heightIn, colour = sex)) +
geom_point() +
geom_line(data = predvals)
运行结果:
向散点图添加边际地毯
本例选用如下测试数据集:
方法很简单,在原先散点图绘制函数的基础上增加边际地毯函数就行。R语言实现代码如下:
# 基函数
ggplot(faithful, aes(x = eruptions, y = waiting)) +
# 散点图函数
geom_point() +
# 边际地毯函数
geom_rug()
运行结果:
向散点图添加标签
本例选用如下测试数据集:
往散点图中添加标签的方法也很简单,在原有散点图函数的基础上增加文本函数即可。R语言实现代码如下:
# 基函数
ggplot(cty_1, aes(x = healthexp, y = infmortality)) +
# 散点图函数
geom_point() +
# 文本函数:aes参数中:y将原有纵轴值向上偏移,label设置绑定文本
# 将y轴偏移的目的是为了让文本展示在样本点上方而不是中间
geom_text(aes(y = infmortality + .2, label = Name))
运行结果:
PS:该示例中我们在文本绘制函数中重定义了美学特征集。之后文本绘制函数将使用新的美学特征集,但其他绘制函数的不变。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
在数据分析、业务监控、质量检测与风险管控工作中,数据波动性是衡量数据稳定性、业务健康度、结果可信度的核心依据。数据波动代 ...
2026-08-18很多分析师在设计标签时思路清晰,但真到落地环节却面临“数据在手,不知如何转化为可用标签”的困境:或因加工方式选择不当导致 ...
2026-08-18在数据分析、业务评价、产品评级、用户分层与综合决策场景中,单一指标往往无法全面、客观地评价事物整体水平。现实中的评价对象 ...
2026-08-18在数理统计、假设检验、数据分析与机器学习领域中,卡方分布(χ²分布)是继正态分布、t分布之后最重要的连续型概率分布之一。 ...
2026-08-17在Python数据清洗、文本校验、账号密码规则校验、脏数据过滤、字符串规整化处理中,正则表达式是最高效、最常用的文本匹配工具。 ...
2026-08-17 很多分析师每天和数据打交道,但当被问到“标签是什么”“标签和指标有什么区别”“标签体系如何设计”时,却常常答不上来。 ...
2026-08-17手游行业具备用户迭代快、竞争激烈、用户粘性易流失的典型特征。随着新游持续上线、玩家审美升级、玩法疲劳等问题出现,存量用户 ...
2026-08-14在数字化产品运营、商业数据分析、业务增长管理中,零散的指标统计无法支撑系统性的业务决策。单一的点击率、转化率、销量数据只 ...
2026-08-14 很多数据分析师每天都在写SQL,但当被问到“数据查询语言(DQL)的本质是什么”“SELECT语句中各子句的书写顺序与实际执行顺 ...
2026-08-14在数据库数据分析、数据清洗、报表统计与业务查询场景中,日期时间是最高频、最核心的基础字段。数据库中存储的日期格式多样,包 ...
2026-08-13在数据统计分析与数据清洗工作中,箱线图是一种简洁高效、客观性强的数据可视化图表,能够直观呈现数据集的分布特征、离散程度和 ...
2026-08-13 很多数据分析师写过无数个SELECT查询,但当被问到“如何新建一张表来固化中间数据”“创建视图和创建物理表有什么区别”“视 ...
2026-08-13在自动化办公、数据采集、定时统计、日志清理、系统监控等场景中,程序往往需要按照固定时间间隔重复执行指定任务,这种运行机制 ...
2026-08-12在数据分析日常工作中,Excel数据筛选是数据清洗、数据提取、样本筛选的核心基础操作。传统Excel手动筛选、函数筛选方式,面对多 ...
2026-08-12 很多数据分析师精通Excel函数和数据透视表,但当被问到“数据从哪里来”“表和视图有什么区别”“数据库管理系统和SQL是什么 ...
2026-08-12在数据分析、统计建模、数据挖掘与商业调研过程中,原始数据往往无法做到绝对干净规整。受系统故障、人工录入失误、设备误差、突 ...
2026-08-11在数据分析工作中,聚类分析是典型的无监督学习方法,核心作用是依据数据自身的多维特征,将相似样本自动划分为若干类别,实现“ ...
2026-08-11 很多企业团队并非缺乏指标,而是陷入“指标失控”:仪表盘上堆满实时跳动的数据,却无法回答“当前瓶颈在哪、下一步该做什么 ...
2026-08-11AB实验是互联网产品迭代、营销优化、功能升级的核心科学验证手段,通过流量随机分组、对照组与实验组对比,科学验证策略、功能、 ...
2026-08-10在MySQL数据库优化中,索引是提升查询效率、降低数据库IO开销、优化系统性能的核心手段。普通单列索引仅适配简单查询场景,面对 ...
2026-08-10