散点图用于描述两个连续性变量间的关系,三个变量之间的关系可以通过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=19)
abline(lm(mpg~wt),col='red',lwd=2,lty=1)
lines(lowess(wt,mpg),col='blue',lwd=2,lty=2)

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

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

library(car)
scatterplot(mpg~wt|cyl, data=mtcars,lwd=2,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 = 2, prefix = "", cex.cor, ...)
{usr <- par("usr")on.exit(par(usr))par(usr = c(0, 1, 0, 1))r <- abs(cor(x, y))txt <- format(c(r, 0.123456789), digits = digits)[1]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=1, 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(.5, .95), robust=TRUE,groups=NULL, by.groups=FALSE, use=c("complete.obs", "pairwise.complete.obs"),labels, id.method="mahal", id.n=0, id.cex=1, id.col=palette()[1], id.location="lr",col=if (n.groups == 1) palette()[3:1] else rep(palette(), length=n.groups),pch=1:n.groups, lwd=1, lty=1, cex=par("cex"), cex.axis=par("cex.axis"), cex.labels=NULL, cex.main=par("cex.main"), legend.plot=length(levels(groups)) > 1, 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=2),main='Scatter Plot Matrix via car Package')

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

三,高密度散点图

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

set.seed(1234)
n<-1000
c1 <- matrix(rnorm(n,mean=0,sd=1),ncol = 2)
c2 <- matrix(rnorm(n,mean=3,sd=5),ncol = 2)
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 = 30)

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

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

library(hexbin)
with(mydata,{bin <- hexbin(x,y,xbins=50)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=1, angle=40,axis=TRUE, tick.marks=TRUE, label.tick.marks=TRUE,x.ticklabs=NULL, y.ticklabs=NULL, z.ticklabs=NULL,y.margin.add=0, grid=TRUE, box=TRUE, lab=par("lab"),lab.z=mean(lab[1:2]), type="p", highlight.3d=FALSE,mar=c(5,3,4,3)+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=16,highlight.3d = TRUE,type='h',main='3D Scatter Plot with Vertical Lines'))

可旋转的3D散点图:

library(rgl)
with(mtcars,plot3d(wt,disp,mpg,col='red',size=5))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绘图 | 描述性统计常用图(散点图+柱状图+饼图)

    descriptive 整个新系列.目前的几个系列, #R实战  以生信分析为主, #跟着CNS学作图 以复现顶刊Figure为主,而本系列 #R绘图 则是学习不在文章中但同样很好看的图,致力于给同学 ...

  2. R绘图 第八篇:绘制饼图(ggplot2)

    geom_bar()函数不仅可以绘制条形图,还能绘制饼图,跟绘制条形图的区别是坐标系不同,绘制饼图使用的坐标系polar,并且设置theta="y": coord_polar(th ...

  3. opengl绘制长方体线框_OpenGL绘图实例十之绘制3D机器人

    综述 通过上一节说的绘制3D图形基础,我们应该对绘制3D图形有了基本的认识,接下来我们就进行一个实例,绘制一个3D机器人. 本节我们要完成的任务有: 1.绘制一个仿真3D机器人(样式自选,参考例图), ...

  4. R绘图笔记 | 火山图的绘制

    参考前文:R绘图笔记 | R语言绘图系统与常见绘图函数及参数 关于绘图,前面介绍了一些: R绘图笔记 | 一般的散点图绘制 R绘图笔记 | 柱状图绘制 R绘图笔记 | 直方图和核密度估计图的绘制 R绘 ...

  5. R绘图 | 堆叠柱状图

    stack_bar 整个新系列.目前的几个系列, 「#R实战」  以「生信分析」为主, 「#跟着CNS学作图」 以「复现顶刊」Figure为主,而本系列 「#R绘图」 则是学习不在文章中但同样很好看的 ...

  6. 国庆特惠 !| CNS图表复现|生信分析|R绘图 资源分享讨论群!

    cover ❝ Q:群里有哪些资源? A:2022.12.31前木舟笔记公众号更新的所有资源.(具体目录详见下方) Q:2022年都快结束了,现在加群不是亏了? A:无论什么时候加群,拿到的资源都是一 ...

  7. R绘图笔记 | 一般的散点图绘制

    可先阅读文章:R绘图笔记 | R语言绘图系统与常见绘图函数及参数 1.利用plot()绘制散点图 R语言中plot()函数的基本格式如下: plot(x,y,...) plot函数中,x和y分别表示所 ...

  8. R绘图 vs Python绘图(散点图、折线图、直方图、条形图、箱线图、饼图、热力图、蜘蛛图)

    写在前面:为啥不用excel绘制这些图,用PoweBI,帆软BI等可视化软件来绘图,不是更方便吗?的确,这些工具都很方便,但同时,它们显得很呆,不够灵活,更为致命的是,它们绘制出的图形,分辨率不够,用 ...

  9. Android绘图Canvas十八般武器之Shader详解及实战篇(上)

    本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 前言 Android中绘图离不开的就是Canvas了,Canvas是一个庞大的知识体系,有java层的,也有jni层深入到Frame ...

最新文章

  1. 【jQuery 区别】.click()和$(document).on(click,指定的元素,function(){});的区别
  2. c#中Class和Struct使用与性能的区别
  3. tcp连接探测Keepalive和心跳包
  4. openstack中的server
  5. 山东大学计算机学院交叉,Xueying Qin
  6. Debug程序的使用
  7. 那个说技术本身并不可耻的快播王欣回来了!
  8. Android平台程序崩溃的类型及原因列举
  9. 009 - EXCEL文件操作练习题
  10. 如何将html转换成url,HTML URL
  11. 4.3寸TFTLCD显示JPG图片
  12. 金蝶KIS迷你版、标准版年结注意事项!!
  13. Kotlin | 关于 Lazy ,你应该了解的这些事
  14. 【增长工程学】如何研究数字广告投放策略?(Part1)
  15. Error opening data file Tesseract-OCR\tessdata/eng.traineddata问题 解决
  16. Android获取WIFI的SSID的一些差异,有的带引号
  17. 二,八,十六进制数转换为十进制数
  18. 腾讯、抖音、陌陌们都在关注视频社交,可能找错了未来社交的方向
  19. cmd下载远程linux的文件,Java利用ssh协议实现从远程Linux服务器下载文件和文件夹...
  20. [二分图最大独立集] bzoj4808 马

热门文章

  1. 算法【哈希】 | 哈希表
  2. 免费好用的APP你值得一试
  3. 做出正确选择 重设精彩人生
  4. JAVA 利用多方法查找质数(素数)
  5. jxl实现写入excel模板及导出(带图片)
  6. python supervisor 检测代码变动重启_supervisor更改某项目配置后 需要重新启动才有效...
  7. 网格画法:原生 Canvas 画网格,可拖动、可放大缩小、并带有坐标系 0 0 位置辅助线
  8. 桌面窗口管理器占用内存大的解决办法
  9. 如何实现受管控的安全文件传输MFT?
  10. 如何理解高内聚,低耦合