散点图用于描述两个连续性变量间的关系,三个变量之间的关系可以通过3D图形或气泡来展示,多个变量之间的两两关系可以通过散点图矩阵来展示。

一,添加了最佳拟合曲线的散点图

使用基础函数plot(x,y)来绘制散点图,其中x和y是数值型向量,代表着图形中的点(x,y)

attach(mtcars)
plot(wt,mpg,
main='Basic Scatter plot of MPG vs Weight',
xlab='Car Weight(1bs/1000)',
ylab='Miles Per Gallon',
pch=)
abline(lm(mpg~wt),col='red',lwd=,lty=)
lines(lowess(wt,mpg),col='blue',lwd=,lty=)

abline()函数用于添加最佳拟合的线性回归直线;lowess()函数用于添加一条平滑曲线。

car包中的scatterplot()函数增强了散点图的许多功能,它可以很方便地绘制散点图,并能添加拟合曲线,边界箱线图和置信椭圆,还可以按子集绘图和交互式地识别点。

library(car)
scatterplot(mpg~wt|cyl, data=mtcars,lwd=,span=0.75,
main='Scatter Plot of MPG vs Weight by # Cylinders',
xlab='Weight of Car (lbs/1000)',
ylab='Miles Per Gallon',
legend.plot=TRUE,
boxplots='xy')

参数注释:

formula: 在该参数中,分组使用 | group_variable 来表示。例如,mpg ~ wt| cyl,表示的含义是按照cyl的水平分别绘制mpg和wt的关系图

span:控制loess曲线中的平滑量,该参数值最大,拟合的效果越好。

legend.plot:设置为TRUE,表示在左上边界添加图例

boxplots:表示边界线箱图,有效值是x,y或xy,分别表示在x轴,y轴,或xy轴上绘制箱图。

二,散点图矩阵

基础函数paris()函数用于创建散点图矩阵,panel.cor()函数是自定义的面板函数(panel function),用于在矩阵的上三角显示相关度;下三角使用系统预定义的平滑函数,用于在矩阵的下三角显示散点图和平滑曲线。

panel.cor <- function(x, y, digits = , prefix = "", cex.cor, ...)
{
usr <- par("usr")
on.exit(par(usr))
par(usr = c(, , , ))
r <- abs(cor(x, y))
txt <- format(c(r, 0.123456789), digits = digits)[]
txt <- paste0(prefix, txt)
if(missing(cex.cor)) cex.cor <- 0.8/strwidth(txt)
text(0.5, 0.5, txt, cex = cex.cor * r)
} pairs(~mpg+disp+drat+wt,data=mtcars,
lower.panel=panel.smooth,
upper.panel=panel.cor)

car包中的scatterplotMatrix()函数,用于生成散点图矩阵,实际上,该函数是pairs()的封装器,用于产生增强的散点图矩阵,spm是该函数的别名。

scatterplotMatrix(x,
diagonal=c("density", "boxplot", "histogram", "oned", "qqplot", "none"), adjust=, nclass,
plot.points=TRUE, smoother=loessLine, smoother.args=list(), smooth, span,
spread = !by.groups, reg.line=lm,
transform=FALSE, family=c("bcPower", "yjPower"),
ellipse=FALSE, levels=c(., .), robust=TRUE,
groups=NULL, by.groups=FALSE,
use=c("complete.obs", "pairwise.complete.obs"),
labels, id.method="mahal", id.n=, id.cex=, id.col=palette()[], id.location="lr",
col=if (n.groups == ) palette()[:] else rep(palette(), length=n.groups),
pch=:n.groups, lwd=, lty=,
cex=par("cex"), cex.axis=par("cex.axis"), cex.labels=NULL,
cex.main=par("cex.main"),
legend.plot=length(levels(groups)) > , legend.pos=NULL, row1attop=TRUE, ...)

参数注释:

  • diagonal:对角线面板显示的内容,
  • adjust:用于密度估计的相对带宽(relative bandwidth),传递给density()函数
  • nclass:直方图的封箱的数量,传递给hist()函数
  • plot.points:是否在非对角线绘制点,默认值是TRUE
  • smoother:用于制定函数,用于绘制平滑曲线,默认值是gamLine()函数,其他有效值是:loessLine,quantregLine
  • smoother.args:传递给smoother函数的参数,是一个list类型,例如,smoother.args==list(lty=2) 表示设置平滑(loess)拟合曲线使用虚线,而不是实线
  • smooth,span:这两个参数是为了向后兼容,如果该参数设置为TRUE(默认值),那么smooter设置为LoessLine,使用LoessLine()函数绘制平滑曲线。如果设置span,那么该参数会被添加到smoother.args中。
  • spread:是否添加用于展示分散度和对称信息的直线,默认值是by.groups参数值取反。
  • reg.line:默认值是lm,用于制定绘制回归直线的函数
  • ellipse:在非对角线绘制数据密度椭圆
  • groups:对数据分组
  • by.groups:如果设置为TRUE,那么回归直线按照分组来拟合(fit)

例如:使用mtcars数据集来绘制散点图:

library(car)
scatterplotMatrix(~mpg+disp+drat+wt,data=mtcars,
spread=FALSE,smoother.args=list(lty=),
main='Scatter Plot Matrix via car Package')

主对角线上放置了核密度曲线和轴须:

三,高密度散点图

基础包中的smoothScatter()函数,可以利用核密度估计生成用颜色密度来表示点密度的散点图。

set.seed()
n<-
c1 <- matrix(rnorm(n,mean=,sd=),ncol = )
c2 <- matrix(rnorm(n,mean=,sd=),ncol = )
mydata <- rbind(c1,c2)
mydata <- as.data.frame(mydata)
names(mydata) <- c('x','y') with(mydata,smoothScatter(x,y,main='Scatter Plot Colored by Smoothed Densities'))

hexbin包中hexbin()函数,把二元变量的封箱放到六边形单元格中,xbins是水平封箱的数量:

hexbin(x, y, xbins = )

该函数创建了一个hexbin对象,最基本的组成是一个cell和落入每个cell的点的数量count。

例如,使用hexbin()来绘制高密度散点图,六边形的颜色深度表示散点的密度。

library(hexbin)
with(mydata,
{bin <- hexbin(x,y,xbins=)
plot(bin,main='Hex binning with 10000 Observations')})

四,三维散点图

三维散点图用于对三个变量之间的交互关系进行可视化,包scatterplot3d包中的函数scatterplot3d(),可以用于绘制三维散点图:

scatterplot3d(x, y=NULL, z=NULL, color=par("col"), pch=par("pch"),
main=NULL, sub=NULL, xlim=NULL, ylim=NULL, zlim=NULL,
xlab=NULL, ylab=NULL, zlab=NULL, scale.y=, angle=,
axis=TRUE, tick.marks=TRUE, label.tick.marks=TRUE,
x.ticklabs=NULL, y.ticklabs=NULL, z.ticklabs=NULL,
y.margin.add=, grid=TRUE, box=TRUE, lab=par("lab"),
lab.z=mean(lab[:]), type="p", highlight.3d=FALSE,
mar=c(,,,)+0.1, bg=par("bg"), col.axis=par("col.axis"),
col.grid="grey", col.lab=par("col.lab"),
cex.symbols=par("cex"), cex.axis=0.8 * par("cex.axis"),
cex.lab=par("cex.lab"), font.axis=par("font.axis"),
font.lab=par("font.lab"), lty.axis=par("lty"),
lty.grid=par("lty"), lty.hide=NULL, lty.hplot=par("lty"),
log="", asp=NA, ...)

参数注释:

  • x,y,z:图形的三个坐标
  • color:点的颜色
  • main,sub:主标题和小标题
  • xlim,ylim,zlim:用于指定(min,max),用于限制坐标轴上点的范围。
  • xlab,ylab,zlab:各个坐标轴的标签
  • scale.y:y轴相对于x和z的标度
  • angle:x和y轴之间的角度
  • axis:是否绘制坐标轴
  • tick.marks, label.tick.marks, x.ticklabs, y.ticklabs, z.ticklabs:刻度,刻度值
  • type:用于指定点的类型,p是点,l是线,h是在x-y平面中的垂线
  • highlight.3d:当type = "p" 或 type = "h" 时,根据y坐标把点绘制成不同的颜色;其他情况下,使用color参数的值来绘制点的颜色。

例如,利用mtcars数据集,绘制wt,disp和mpg之间的三维散点图:

library(scatterplot3d)
with(mtcars,
scatterplot3d(wt,disp,mpg,
pch=,
highlight.3d = TRUE,
type='h',
main='3D Scatter Plot with Vertical Lines'))

可旋转的3D散点图:

library(rgl)
with(mtcars,
plot3d(wt,disp,mpg,col='red',size=)) library(car)
with(mtcars,scatter3d(wt,disp,mpg))

五,气泡图

使用气泡图来展示三个变量之间的关系,先创建一个二维散点图,然后用点的大小来代表第三个变量的值。

基础包中的symbols()函数用于绘制气泡图:

symbols(x, y = NULL, circles=radius, squares, rectangles, stars, inches = TRUE,
fg = par("col"), bg = NA,
xlab = NULL, ylab = NULL, main = NULL,
xlim = NULL, ylim = NULL, ...)

参数注释:

x,y,circles:circles用于指定气泡的半径

inches:比例因子,控制气泡的大小(默认最大圆圈为1 inch)

参考文档:

scatterplotMatrix

R绘图 第十二篇:散点图(高级)的更多相关文章

  1. R实战 第十二篇:随机数

    由R生成的随机数实际上伪随机数,也就是说,随机数是由某种算法而不是真正的随机过程产生的,随机数生成器需要一个初始值来生成数字,该初始值叫做种子.通过把种子设置为特定的值,可以保证每次运行同一段代码时都 ...

  2. 第十二篇 .NET高级技术之lambda表达式

    最近由于项目需要,刚刚学完了Action委托和Func<T>委托,发现学完了委托就必须学习lambda表达式,委托和Lambda表达式联合起来,才能充分的体现委托的便利.才能使代码更加简介 ...

  3. 第十二篇 Integration Services:高级日志记录

    本篇文章是Integration Services系列的第十二篇,详细内容请参考原文. 简介在前一篇文章我们配置了SSIS内置日志记录,演示了简单和高级日志配置,保存并查看日志配置,生成自定义日志消息 ...

  4. 【译】第十二篇 Integration Services:高级日志记录

    本篇文章是Integration Services系列的第十二篇,详细内容请参考原文. 简介在前一篇文章我们配置了SSIS内置日志记录,演示了简单和高级日志配置,保存并查看日志配置,生成自定义日志消息 ...

  5. Python开发【第二十二篇】:Web框架之Django【进阶】

    Python开发[第二十二篇]:Web框架之Django[进阶]   猛击这里:http://www.cnblogs.com/wupeiqi/articles/5246483.html 博客园 首页 ...

  6. 跟我学SpringCloud | 第十二篇:Spring Cloud Gateway初探

    SpringCloud系列教程 | 第十二篇:Spring Cloud Gateway初探 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如 ...

  7. 第十二篇 SQL Server代理多服务器管理

    本篇文章是SQL Server代理系列的第十二篇,详细内容请参考原文 在这一系列的上一篇,我们查看了维护计划,一个维护计划可能会创建多个作业,多个计划.你还简单地看了SSIS子系统,并查看了维护计划作 ...

  8. 【译】第十二篇 SQL Server代理多服务器管理

    本篇文章是SQL Server代理系列的第十二篇,详细内容请参考原文 在这一系列的上一篇,我们查看了维护计划,一个维护计划可能会创建多个作业,多个计划.你还简单地看了SSIS子系统,并查看了维护计划作 ...

  9. Mysql优化(出自官方文档) - 第十二篇(优化锁操作篇)

    Mysql优化(出自官方文档) - 第十二篇(优化锁操作篇) 目录 Mysql优化(出自官方文档) - 第十二篇(优化锁操作篇) 1 Internal Locking Methods Row-Leve ...

随机推荐

  1. python redis 终端 redis-cli.py mini版本 redis 终端管理工具

    Python redis-cli.py Python3 redis-cli 命令行管理工具 redis终端工具 由于最近测试redis未授权访问漏洞,发现本机没有安装redis,不能运行redis-c ...

  2. python第五十天--paramiko

    python通过paramiko实现,ssh功能 import paramiko ssh =paramiko.SSHClient()#创建一个SSH连接对象 ssh.set_missing_host_ ...

  3. Asp.Net配置不允许通过url方式访问目录下的资源

    Asp.Net网站发布后,有部分文件为了安全性,是不能直接通过url访问获取 通常有2种做法: 1.将文件目录建立在 App_code 或者App_Data 等默认的隐藏目录下 2.将文件的目录添加到 ...

  4. 如何使用C语言的面向对象

    我们都知道,C++才是面向对象的语言,但是C语言是否能使用面向对象的功能? (1)继承性 typedef struct _parent { int data_parent; }Parent; type ...

  5. momentjs 学习

    momentjs 是一个JavaScript日期处理类库,官网地址:http://momentjs.com/ 字符串 + 格式 moment(String, String); moment(Strin ...

  6. Centos7使用Docker安装Gogs搭建git服务器

    gihub地址:https://github.com/gogs/gogs gogs官网:https://gogs.io/ gihub官方docker安装gogs方法:https://github.co ...

  7. February 2nd, 2018 Week 5th Friday

    Reputation takes a life time to build and a second to destroy. 树立名声需要一生的努力,而毁掉它只需要一秒. To be a smart ...

  8. MySQL视图 索引 存储过程 触发器 函数

       视图: 也就是一个虚拟表(不是真实存在的),它的本质就是根据SQL语句获取动态的数据集,并为其命名.用户使用时只需要使用命名的视图即可获取结果集,并可以当做表来使用.它的作用就是方便查询操作,减 ...

  9. 如何将爬取的数据写入ES中

    前面章节一直在说ES相关知识点,现在是如何实现将爬取到的数据写入到ES中,首先的知道ES的python接口叫elasticsearch dsl 链接:https://github.com/elasti ...

  10. 使用verdaccio 搭建npm私有仓库

    使用verdaccio 搭建npm私有仓库 1. 为什么要搭建私有的npm仓库?    随着公司的业务越来越复杂,项目迭代速度也越来越快,那么项目间的常用的业务代码共享变得非常之有必要.但是对于公司的 ...