京公网安备 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
近日,由 CDA 数据科学研究院重磅发布的《2026 全球数智化人才指数报告》,被中国教育科学研究院官方账号正式收录, ...
2026-04-22在数字化时代,客户每一次点击、浏览、下单、咨询等行为,都在传递其潜在需求与决策倾向——这些按时间顺序串联的行为轨迹,构成 ...
2026-04-22数据是数据分析、建模与业务决策的核心基石,而“数据清洗”作为数据预处理的核心环节,是打通数据从“原始杂乱”到“干净可用” ...
2026-04-22 很多数据分析师每天盯着GMV、转化率、DAU等数字看,但当被问到“什么是指标”“指标和维度有什么区别”“如何搭建一套完整的 ...
2026-04-22在数据分析与业务决策中,数据并非静止不变的数值,而是始终处于动态波动之中——股市收盘价的每日涨跌、企业月度销售额的起伏、 ...
2026-04-21在数据分析领域,当研究涉及多个自变量与多个因变量之间的复杂关联时,多变量一般线性分析(Multivariate General Linear Analys ...
2026-04-21很多数据分析师精通描述性统计,能熟练计算均值、中位数、标准差,但当被问到“用500个样本如何推断10万用户的真实满意度”“这 ...
2026-04-21在数据处理与分析的全流程中,日期数据是贯穿业务场景的核心维度之一——无论是业务报表统计、用户行为追踪,还是风控规则落地、 ...
2026-04-20在机器学习建模全流程中,特征工程是连接原始数据与模型效果的关键环节,而特征重要性分析则是特征工程的“灵魂”——它不仅能帮 ...
2026-04-20很多数据分析师沉迷于复杂的机器学习算法,却忽略了数据分析最基础也最核心的能力——描述性统计。事实上,80%的商业分析问题, ...
2026-04-20在数字化时代,数据已成为企业决策的核心驱动力,数据分析与数据挖掘作为解锁数据价值的关键手段,广泛应用于互联网、金融、医疗 ...
2026-04-17在数据处理、后端开发、报表生成与自动化脚本中,将 SQL 查询结果转换为字符串是一项高频且实用的操作。无论是拼接多行数据为逗 ...
2026-04-17面对一份上万行的销售明细表,要快速回答“哪个地区卖得最好”“哪款产品增长最快”“不同客户类型的购买力如何”——这些看似复 ...
2026-04-17数据分析师一天的工作,80% 的时间围绕表格结构数据展开。从一张销售明细表到一份完整的分析报告,表格结构数据贯穿始终。但你真 ...
2026-04-16在机器学习无监督学习领域,Kmeans聚类因其原理简洁、计算高效、可扩展性强的优势,成为数据聚类任务中的主流算法,广泛应用于用 ...
2026-04-16在机器学习建模实践中,特征工程是决定模型性能的核心环节之一。面对高维数据集,冗余特征、无关特征不仅会增加模型训练成本、延 ...
2026-04-16在数字化时代,用户是产品的核心资产,用户运营的本质的是通过科学的指标监测、分析与优化,实现“拉新、促活、留存、转化、复购 ...
2026-04-15在企业数字化转型、系统架构设计、数据治理与AI落地过程中,数据模型、本体模型、业务模型是三大核心基础模型,三者相互支撑、各 ...
2026-04-15数据分析师的一天,80%的时间花在表格数据上,但80%的坑也踩在表格数据上。 如果你分不清数值型和文本型的区别,不知道数据从哪 ...
2026-04-15在人工智能与机器学习落地过程中,模型质量直接决定了应用效果的优劣——无论是分类、回归、生成式模型,还是推荐、预测类模型, ...
2026-04-14