第五篇:R语言数据可视化之散点图

散点图简介

散点图通常是用来表述两个连续变量之间的关系,图中的每个点表示目标数据集中的每个样本。

同时散点图中常常还会拟合一些直线,以用来表示某些模型。

绘制基本散点图

本例选用如下测试数据集:

绘制方法是首先调用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:该示例中我们在文本绘制函数中重定义了美学特征集。之后文本绘制函数将使用新的美学特征集,但其他绘制函数的不变。

时间: 2024-11-05 20:35:24

第五篇:R语言数据可视化之散点图的相关文章

R语言数据可视化之散点图

散点图简介 散点图通常是用来表述两个连续变量之间的关系,图中的每个点表示目标数据集中的每个样本. 同时散点图中常常还会拟合一些直线,以用来表示某些模型. 回到顶部 绘制基本散点图 本例选用如下测试数据集: 绘制方法是首先调用ggplot函数选定数据集,并在aes参数中指明横轴纵轴.然后调用散点图函数geom_point()便可绘制出基本散点图.R语言示例代码如下: 1 2 3 4 # 基函数 ggplot(ah, aes(x = ageYear, y = heightIn)) +   # 散点图

第四篇:R语言数据可视化之折线图、堆积图、堆积面积图

前言 折线图通常用来对两个连续变量的依存关系进行可视化,其中横轴很多时候是时间轴. 但横轴也不一定是连续型变量,可以是有序的离散型变量. 绘制基本折线图 本例选用如下测试数据集: 绘制方法是首先调用ggplot函数选定数据集,并在aes参数中指明横轴纵轴.然后调用条形图函数geom_line()便可绘制出基本折线图.R语言示例代码如下: # 基函数 ggplot(BOD, aes(x = Time, y = demand)) + # 折线图函数 geom_line()     运行结果: 向折线

第三篇:R语言数据可视化之条形图

条形图简介 数据可视化中,最常用的图非条形图莫属,它主要用来展示不同分类(横轴)下某个数值型变量(纵轴)的取值.其中有两点要重点注意: 1. 条形图横轴上的数据是离散而非连续的.比如想展示两商品的价格随时间变化的走势,则不能用条形图,因为时间变量是连续的: 2. 有时条形图的值表示数值本身,但也有时是表示数据集中的频数,不要引起混淆: 绘制基本条形图 本例选用测试数据集如下: 绘制方法是首先调用ggplot函数选定数据集,并在aes参数中指明横轴纵轴.然后调用条形图函数geom_bar(stat

第二篇:R语言数据可视化之数据塑形技术

前言 绘制统计图形时,半数以上的时间会花在调用绘图命令之前的数据塑型操作上.因为在把数据送进绘图函数前,还得将数据框转换为适当格式才行. 本文将给出使用R语言进行数据塑型的一些基本的技巧,更多技术细节推荐参考<R语言核心手册>. 数据框塑型 1. 创建数据框 - data.frame() # 创建向量p p = c("A", "B", "C") # 创建向量q q = 1:3 # 创建数据框:含p/q两列 dat = data.fra

R语言数据可视化1—ggplot2画柱状图

目的:将已有的业务表(csv格式),导入到Rstudio中.根据"开始时间",按月份统计出业务量.画出下图.(注:我选择的业务表中只有1.2.3月的数据) 开始吧!!! 1.加载csv格式的数据表,并查看字段名: ##加载数据 khsx <-read.csv("khsx.csv",header = TRUE) names(khsx)##查看列名 2.加载将要使用的包 ##加载包 library(ggplot2) ##画图用的包 library(lubridat

《美团 R 语言数据运营实战》

美团 R 语言数据运营实战 2018年08月02日 作者: 喻灿 刘强 文章链接 3689字 8分钟阅读 一.引言 近年来,随着分布式数据处理技术的不断革新,Hive.Spark.Kylin.Impala.Presto 等工具不断推陈出新,对大数据集合的计算和存储成为现实,数据仓库/商业分析部门日益成为各类企业和机构的标配.在这种背景下,是否能探索和挖掘数据价值,具备精细化数据运营的能力,就成为判定一个数据团队成功与否的关键. 在数据从后台走向前台的过程中,数据展示是最后一步关键环节.与冰冷的表

R语言数据操作之apply系列

1 ###################R语言中apply类型问题 2 data<-data.frame(x=c(1,2,3,4),y=c(2,3,4,5),z=c(5,6,7,8)) 3 apply(data,2,mean)##apply针对数据框 4 lapply(data,mean)##lapply针对list,当然对dataframe也有效 5 data1<-list(a=1:10,b=exp(-3:3),c=c(FALSE,FALSE,FALSE)) 6 lapply(data1,

R语言数据合并使用merge数据追加使用rbind和cbind

R语言中的横向数据合并merge及纵向数据合并rbind的使用 我们经常会遇到两个数据框拥有相同的时间或观测值,但这些列却不尽相同.处理的办法就是使用merge(x, y ,by.x = ,by.y = ,all = ) 函数. #合并ID<-c(1,2,3,4)name<-c("A","B","C","D")score<-c(60,70,80,90)student1<-data.frame(ID,na

R语言数据去重

R语言常用的去重命令有unique duplicated unique主要是返回一个把重复元素或行给删除的向量.数据框或数组 > x <- c(3:5, 11:8, 8 + 0:5)> x [1]  3  4  5 11 10  9  8  8  9 10 11 12 13> unique(x)[1]  3  4  5 11 10  9  8 12 13> unique(x, fromLast = TRUE)[1]  3  4  5  8  9 10 11 12 13