R语言实战笔记--第十一章 中级绘图之散点、气泡、相关、马赛克

来源:互联网 发布:宜家值得购买知乎 编辑:程序博客网 时间:2024/05/23 01:16

R语言实战笔记–第十一章 中级绘图之散点、气泡、相关、马赛克

标签(空格分隔): R语言 绘图方法 散点图 气泡图 相关图 马赛克图


  R语言实战中的中级绘图包括了散点图、气泡图、拆线图、相关图和马赛克图,主要讲述的是二元和多元关系的图形表述。

散点图

  散点图,可以说得上是所有图的基础,因为其它图无一不是由点组成的线或面,理解散点图,其它图基本就有个大概的理解了。
  散点图一般来说,都是配对出现,二维坐标是两个数据(x,y),三维就是(x,y,z)。把这些点连接起来就是折线图,把这些点按某个面填充就是平面图。
  下面看一下几种类型的散点图。
  首先是二维散点图,添加了回归拟合及多项式拟合曲线:

#plot+abline+lines基本组合,依赖基础包即可,要求对基础包有较高的认识水平。with(mtcars,{plot(wt,mpg,main="BS",ylab="MPG",xlab="weight",pch=19)abline(lm(mpg~wt),col="red",lwd=2,lty=1)lines(lowess(wt,mpg),col="blue",lwd=2,lty=2)})#car包中的scatterplot,使用方便,仅需要设置参数即可。library(car)scatterplot(mpg~wt|cyl,legend.plot=T,id.method="identify",labels=row.names(mtcars),boxplots="xy") #“|cyl”意思为以cyl为分类,boxplots="xy"意思为添加xy的边界箱线图,可以是“x”,也可以只是“y”,或者不要。

这里写图片描述
这里写图片描述
  然后是散点矩阵图,它能够显示多个变量之间的两两关系

#pairs,依赖基础包即可,要求对基础包有较高的认识水平。但这个包只能显示散点矩阵图,并不能显示拟合线,总体上看并不是那么直观。pairs(~mpg+disp+drat+wt,data=mtcars,main="Matrix Scatter Plot")#car包中的scatterplotMatrix,除了散点矩阵,还可以在图中添加1)以某个因子为条件绘制散点图矩阵2)包含线性和平滑拟合曲线3)在主对角线放置箱线图、密度图或者直方图4)在各单元格的边界添加轴须图。library(car)scatterplotMatrix(~mpg+disp+drat+wt,data=mtcars,spread=FALSE,lty=2,main="Scatter Plot Matrix") #spread=F意思为不添加展示分散度和对称信息的直线;主对角线的核密度曲线、各图的线性及平滑曲线默认添加。#scatterplotMatrix函数还可以以某个因子为条件做散点矩阵图,并把主对角线的核密度曲线改为直方图显示scatterplotMatrix(~ mpg + disp + drat + wt | cyl, data=mtcars, spread=FALSE,main="Scatterplot Matrix via car package",diagonal="histogram")#diagonal的参数还可以是“density(密度图),boxplot(箱线图),oned(不晓得),qqplot(QQ图),none”;添加by.groups=TRUE可以按子集(这里是cyl)分别生成拟合曲线。#gclus包中的cpairs函数可以生成一个根据相关性重排并着色的矩阵,代码如下:library(gclus)ydata <- mtcars[c(1,3,5,6)]#获取数据mydata.corr <- abs(cor(mydata))#求相关系数并取绝对值mycolors <- dmat.color(mydata.corr) #设置颜色myorder <- order.single(mydata.corr) #设置生排,相关性高的更靠近主对角线cpairs(mydata,myorder,panel.colors=mycolors,gap=.5,main="Variables Ordered and Colored by Correlation")#作图

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
  然后是高密度散点图
  高密度散点图有很多包都支持,直接使用plot画出的散点图在密度较高的时候,因为密度过高,所有的点都在一个大区域集中、重叠,导致分不清某个区域至今集中了多少个点,此时,可以使用透明度、颜色,封箱等方法进行画图。

set.seed(1234)n <- 10000c1 <- matrix(rnorm(n, mean=0, sd=.5), ncol=2)c2 <- matrix(rnorm(n, mean=3, sd=2), ncol=2)mydata <- rbind(c1, c2)mydata <- as.data.frame(mydata)names(mydata) <- c("x", "y")with(mydata,plot(x, y, pch=19, main="Scatter Plot"))with(mydata,smoothScatter(x, y, main="Scatterplot by smoothScatter"))library(hexbin)with(mydata, {bin <- hexbin(x, y, xbins=50)plot(bin, main="Scatterplot by hexbin:plot")})library(IDPmisc)with(mydata,iplot(x, y, main="Scatterplot by IDPmisc:iplot"))

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

  最后是三维散点图,三维散点图也可以通过添加回归曲面。代码如下:

library(scatterplot3d)attach(mtcars)#单纯画出维散点图scatterplot3d(wt, disp, mpg, main="Basic 3D Scatterplot")#添加纵深感(通过颜色,越后面越黑)与点到水平面的垂直线scatterplot3d(wt, disp, mpg, pch=16, highlight.3d=TRUE,type="h",main="3D Scatterplot with Vertical Lines")#添加回归平面,点到回归平面的垂直距离为残差s3d <-scatterplot3d(wt, disp, mpg, pch=16, highlight.3d=TRUE, type="h", main="3D Scatter Plot with Verical Lines and Regression Plane")fit <- lm(mpg ~ wt+disp) s3d$plane3d(fit)detach(mtcars)、#3D可交互散点图,在rgl包中,但没有其它参数可选,较为难理解。library(rgl)plot3d(wt, disp, mpg, col="red", size=5)#Rcmdr包中的scatter3d命令,可以创建一个带平面(默认线性)的3D可交互散点图library(Rcmdr)scatter3d(wt, disp, mpg)

这里写图片描述
可交互的3D散点图以及Rcmdr包中的3D散点图就不在这里展示了。

气泡图

  实际上,气泡图应该也是散点图的一种,它可以使用点(即气泡)的大小来表示第三个变量,代码如下:

#使用symbols画气泡图,fg设置气泡边界颜色,bg设定气泡颜色,text参数添加气泡名称。当气泡过多时,不宜全部添加,当气泡过密时,不宜使用气泡图!attach(mtcars)r <- sqrt(disp/pi)symbols(wt, mpg, r, inches=0.30, fg="white", bg="lightblue",main="Bubble Plot with point size proportional to displacement",ylab="Miles Per Gallon",xlab="Weight of Car (lbs/1000)")text(wt, mpg, rownames(mtcars), cex=0.6)detach(mtcars)

这里写图片描述

折线图

  很明显,将散点图上的点连接起来,就是折线图。

par(mfrow=c(1,2))t1 <- subset(Orange, Tree==1)#散点图plot(t1$age, t1$circumference, xlab="Age (days)", ylab="Circumference (mm)", main="Orange Tree 1 Growth")#把散点图连接起来,type="b"的意思为显示点(p)和线(l)plot(t1$age, t1$circumference, xlab="Age (days)", ylab="Circumference (mm)", main="Orange Tree 1 Growth", type="b")

  
折线图中的type有以下几种参数值:对应的表及图如下:

类型 图形外观 p 只有点 l 只有线 o 实心点和线(即线覆盖在点上) b、c 线连接点(c时不绘制点) s、S 阶梯线 h 直方图式的垂直线 n 不生成任何点和线(通常用来为后面的命令创建坐标轴)

各参数值对应的生成的图如下:
这里写图片描述
折线图中可以使用type=”n”来创建一个空白的坐标轴,然后通过lines在图中添加折线,注意,plot是直接创建一个新的绘图窗口,而lines、title、text、legend等是在已有的绘图窗口上进行创建。下面例子是五棵树的生长过程。

#建立树的相关内容(有多少棵树),把因子转化为数值型,方便图形处理Orange$Tree <- as.numeric(Orange$Tree)ntrees <- max(Orange$Tree)#此处取极值只是为了图例放置坐标xrange <- range(Orange$age)yrange <- range(Orange$circumference)#画出一个空白的坐标轴图plot(xrange, yrange, type="n", xlab="Age (days)", ylab="Circumference (mm)" )#参数设定,包含每一棵树在拆线图中的颜色colors,线形linetype,点形plotcharcolors <- rainbow(ntrees)linetype <- c(1:ntrees)plotchar <- seq(18, 18+ntrees, 1)#利用for循环和lines进行取数并画出折线for (i in 1:ntrees) {  tree <- subset(Orange, Tree==i)  lines(tree$age, tree$circumference, type="b", lwd=2, lty=linetype[i], col=colors[i], pch=plotchar[i] ) }#添加标题title("Tree Growth", "example of line plot")#添加图例legend(xrange[1], yrange[2], 1:ntrees, cex=0.8, col=colors, pch=plotchar, lty=linetype, title="Tree" )

这里写图片描述

相关图

  书中介绍相关图只有一个函数,就是corrgram包中的corrgram函数,先看其函数及参数,再看代码和图。

corrgram(dataframe,order=T/F,lower.panel=panel.od,upper.panel=panel.od,text.panel=panel.d,diag.panel=panel.d,col.regions=colorRampPalette(c("color1","color2","color3","color4")))参数说明:order=T/F:TRUE时,使用主成分法对数据进行重排,使相关性更高的更接近主对角线;lower/upper.panel:下/上三角作图区域设置,参数值由panel.od给出panel.od:代表着非主对角线的图形,od参数不存在,使用时替换为pts(散点图), pie(饼图), shade(方块图), bar(条形图), ellipse(椭圆图), conf(带置信区间的相关系数), cor(相关系数)text/diag.panel:主对角线作图区域,参数值由panel.d给出panel.d:text.panel只有panel.txt或NULL可选,而diag.panel则有minmax(最大最小值)和density(密度曲线)可选,当然,所有的作图区域都可以使用NULL来取消作图。col.regions:自定义颜色,必须使用colorRampPalette函数定义其参数值。

  代码及作图如下:

example(corrgram)
这里写图片描述
这里写图片描述

马赛克图

  图很复杂!要仔细琢磨才能看得懂,对于分析可能有意义,但是如果你拿出去展示,单单解释这个图的含义就够呛!
  mosaicplot(formula,data)或者vcd包中的mosaic(formula.data)函数均可制作马赛克图,书中只介绍了vcd包中的mosaic函数,那这里也只说明这个函数吧。

mosaic(table) / mosaic(formula,data,shade=T,legend=T)其中table是一个数组形式的列联表,formula是标准R表达式,data是一个数据框或表格,shade=T为根据拟合模型的皮尔逊残差值对图形上色,legend = T将展示残差的图例。下面两式等价,需要先载入vcd包。mosaic(Titanic,shade=T,legend=T)mosaic(~Class+Sex+Age+Survived,data=Titanic,shade=T,legend=T)

这里写图片描述
  四个变量,马赛克图对这四个变量进行左,上,右,下四边进行分隔,层次也由此顺序进行,左边为最大的层次,间隔最大,如果把Survived放到第一变量,即在左边进行分隔,那么,图形将会变成上部为死亡,下部为生存,可以自己试一下。进行皮尔逊残差值着色的时候,在生存率与船舱等级、年龄及性别无关的条件下,蓝色代表超过期望数,红色代表低于期望值,颜色越深差距越大。

0 0
原创粉丝点击