京公网安备 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
在MySQL数据库运维与开发实践中,经常出现一种典型现象:数据库实际存储的数据量很小,数据表条数少、文件体积低,但服务器整体 ...
2026-09-11 很多数据分析师能熟练计算均值、标准差,但当被问到“总体和样本有什么区别”“参数和统计量有什么关系”“数据级别的高低如 ...
2026-09-11CDA数据分析师 出品 作者:李诗怡 定义: 将同一时间段内因具备相同属性或共同经历的用户划分为群体,分析其留存与生命周期价值 ...
2026-09-11在零售、商超、餐饮、线下门店等实体商业运营中,客流与销售额是衡量门店经营状态的两大核心指标。销售额是门店经营的最终结果, ...
2026-09-10在数据可视化体系中,柱形图是最基础、应用最广泛的图表类型,其中**累计柱形图(堆积柱状图)**是兼顾整体总量与内部结构的核心 ...
2026-09-10 许多数据分析师精通Excel函数和SQL查询,但当面对一张上万行的销售明细表,要快速回答“哪个地区销量最高”“哪款产品增长最 ...
2026-09-10在Python Pandas数据分析中,DataFrame是承载结构化数据的核心载体,数据清洗、数据修正、条件赋值、字段更新等实操场景,都离不 ...
2026-09-09 很多数据分析师掌握了Excel函数、会写SQL查询,但当被问到“数据从哪里来”“数据加工有哪些步骤”“如何使用分析工具连接数 ...
2026-09-09卡方检验(Chi-Square Test)是统计学中针对分类数据的经典显著性检验方法,核心用于判断两个离散分类变量是否相互独立、数据实 ...
2026-09-09CDA数据分析师 出品 作者:李诗怡 1. 销售漏斗阶段判断 题目:销售漏斗模型中,通过广告、社交媒体等方式触达品牌信息(如浏览品 ...
2026-09-07在Python数据分析中,Pandas库的DataFrame是最核心、最常用的结构化数据表对象,类似于Excel的二维表格,具备规整的行列结构、字 ...
2026-09-07在数据分析、经营复盘、业绩预测与经济统计工作中,平均增速(平均增长率)是衡量数据长期变化趋势、业务发展快慢的核心指标。不 ...
2026-09-07 很多数据分析师精通Excel单元格操作,但当被问到“表结构数据的基本处理单位是什么”“字段和记录的本质区别”“为什么表结 ...
2026-09-07随着大数据技术的快速发展,商业竞争逐步从传统的经验式经营转变为数据驱动的精细化运营。海量的用户行为数据、交易数据、运营数 ...
2026-09-04CDA数据分析师 出品 作者:李诗怡 1. 波士顿矩阵(BCG Matrix) 定义: BCG于1970年提出的业务组合分析工具,以"市场增长率"(纵 ...
2026-09-04 数据分析师八成以上的时间在和数据表格打交道,但许多人拿到Excel后习惯性地先算、先分析,结果回头发现漏了一列关键数据, ...
2026-09-04数据透视表是Excel与Power BI中最核心的数据分析工具,具备快速汇总、维度拆分、动态筛选的能力,可高效完成数据归类与统计展示 ...
2026-09-03在Power BI数据分析可视化场景中,堆积柱状图+折线图是最常用的复合图表组合。堆积柱状图适合展示各细分维度当期数值、结构占比 ...
2026-09-03 很多数据分析师每天与Excel打交道,但当被问到“表格结构数据的基本处理单位是什么”“数据类型误判会引发哪些分析错误”“ ...
2026-09-03CDA数据分析师 出品 作者:李诗怡 一、8个核心数据清洗函数 1. TRIM:一键清除多余空格(最常用) 作用:仅保留文本中"单词/字 ...
2026-09-02