首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言入门之散点图

R语言入门之散点图

作者头像
生信与临床
发布2020-08-06 10:08:46
2.5K0
发布2020-08-06 10:08:46
举报

散点图

1. 简单散点图

在R中有很多方式去绘制散点图,其中最基本的就是是用plot(x, y)函数,往期内容已经进行过详细讲解,这里就不赘述了,下面直接看实例图。

# 简单散点图
attach(mtcars) #固定目标数据,方便后续绘图
plot(wt, mpg, main="Scatterplot Example", 
   xlab="Car Weight ", ylab="Miles Per Gallon ", pch=19) #绘图
# Add fit lines
abline(lm(mpg~wt), col="red") # 添加拟合线,这里lm()是一个线性回归函数
lines(lowess(wt,mpg), col="blue") # LOWESS(局部加权散点图平滑化)

在这里我想简单说说attach()函数和detach()函数,这两个函数几乎是成对出现的,首先使用attach()函数先固定一个数据集,这样绘图时就不必使用data$variable的形式来表达变量,使代码简洁明了;当使用完当前数据集需要detach()来解除固定,这样就不会对后续操作产生影响。

从图中我们可以看出lm()得到的是一条直线,而lowess()得到的则是一条平滑曲线。这里提醒一下,lowess()函数是一个局部加权多项式回归函数,详细内容会在以后的统计部分和大家讲解,这里暂不涉及,只需要知道有这个函数方法的存在即可。

R包“car”里提供的scatterplot()是一个高效绘制散点图的函数,它可以用来添加拟合线、绘制边际箱线图等等。

# 增强散点图mpg vs. wt 
# 利用气缸数来分类 
library(car) #加载R包
scatterplot(mpg ~ wt | cyl, data=mtcars, 
   xlab="Weight of Car", ylab="Miles Per Gallon", 
   main="Enhanced Scatter Plot", 
   legend=row.names(mtcars)) #row.names()也可写成rownames()

这里的公式mpg~wt | cyl表示的是以mpg作为纵坐标,wt(汽车的重量)作为横坐标,利用cyl对样本分类标记,然后绘图。从图中可以看出,mpg和wt存在着负相关关系。

2. 散点图矩阵

散点图矩阵是数据分析者特别喜欢的一类图,因为它能简洁而优雅地反映出大量信息,比如变化趋势和关联程度等等。在R中也有很多函数可以用来绘制散点图矩阵。

# 基本散点图矩阵
pairs(~mpg+disp+drat+wt,data=mtcars, 
   main="Simple Scatterplot Matrix")

函数pairs()是一个绘制散点图矩阵的基本函数,它的第一个参数就是绘图公式,~mpg+disp+drat+wt表示mpg、disp、drat和wt两两配对绘制散点图,考虑到横纵坐标可以互调,所以共有4*3=12种情况。从图中我们可以看到数据两两之间的关系,非常简洁明了。

# 利用“car“包的scatterplotMatrix()函数绘制散点图矩阵
library(car)
scatterplotMatrix(~mpg+disp+drat+wt|cyl, data=mtcars,
   main="Three Cylinder Options")

这里只是添加了cyl这个调整项,关于绘图结果的解释可以参考前面的内容。

3. 高密度散点图

当数据集中的数据点有高度重合时,一般的可视化并不能带来较好的效果。这里可以使用“hexbin“包里的hexbin(x,y)函数来解决问题,也可以通过调整点之间的色差来区别重合的点。

# 使用hexbin()函数绘制高密度散点图
library(hexbin) #加载R包
x <- rnorm(1000) #生成1000个服从标准正态分布的随机数
y <- rnorm(1000) #生成1000个服从标准正态分布的随机数
bin<-hexbin(x, y, xbins=50) #生成六边形(hexagonal cell)
plot(bin, main="Hexagonal Binning") #绘图

从绘图的结果可以看出来hexbin()函数将重叠的数据点用不同颜色深度的六边形来区分来,使散点图一目了然。

另外也可以使用sunflowerplot()这个函数来解决样本点重合的问题。下面介绍一下如何使用色差对比来解决样本点重合的绘图问题。

# 使用色差绘制高密度散点图  
x <- rnorm(1000) #生成1000个服从标准正态分布的随机数
y <- rnorm(1000) #生成1000个服从标准正态分布的随机数
plot(x,y, main="Scatterplot Example", col=rgb(0,100,0,50,maxColorValue=255), pch=16) #rgb()函数调整色差

4. 3D 散点图

你可以使用“scatterplot3d“包里的scatterplot3d()函数来绘制3D散点图,下面是几个实例:

# 简单3D散点图
library(scatterplot3d) #加载R包
attach(mtcars) #固定数据集
scatterplot3d(wt,disp,mpg, main="3D Scatterplot") #绘制3D散点图,第一个参数是x轴,第二个参数是y轴,第三个参数是z轴
# 绘制带有颜色和垂线的3D散点图
library(scatterplot3d) #加载R包
attach(mtcars) #固定数据集
scatterplot3d(wt,disp,mpg, pch=16, highlight.3d=TRUE,
  type="h", main="3D Scatterplot") #参数highlight.3d=TRUE用来添加颜色,type="h"添加垂线

另外感兴趣的小伙伴可以使用“rgl“包里的plot3D(x, y, z)函数来绘制具有交互作用的3D散点图,但这种图在学术上使用并不多。

到现在为止关于R语言基础绘图部分我们已经全部介绍完毕,如果还有不明白的地方可以在菜单栏里查看往期内容,接下来我们将进入到基础统计部分的学习,希望大家能感兴趣!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信与临床 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 散点图
    • 1. 简单散点图
      • 2. 散点图矩阵
        • 3. 高密度散点图
          • 4. 3D 散点图
          相关产品与服务
          图像处理
          图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档