• R in action读书笔记(14)第十一章 中级绘图 之一:散点图(高能预警)


    第十一章中级绘图

    本章内容:

    二元变量和多元变量关系的可视化

    绘制散点图和折线图

    理解相关图

    学习马赛克图和关联图

    本章用到的函数有:

    plot

    hexbin

    ablines

    iplot

    scatterplot

    scatterplot3d

    pairs

    plot3d

    scatterplotMatrix

    scatter3d

    cpairs

    symbols

    smoothScatter

     

     

    11.1散点图

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

    > attach(mtcars)
    > plot(wt,mpg,main="Basic Scatter plot of MPGvs.weight",xlab="car weight (lbs/1000",ylab="miles pergallon",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,data=mtcars,lwd=2,
    + main="scatter plot of pmg 
     vs. weight by #cylinders",
    + xlab="car weight (lbs/1000)",
    + ylab="miles per gallon",
    + legend.plot=TRUE,#左上边界添加图例
    + id.method="identify",
    + labels=row.names(mtcars),#可通过点的行名称来识别点
    + boxplots="xy")

     

    11.1.1 散点图矩阵

    pairs()函数可以创建基础的散点图矩阵。

    > pairs(~mpg+disp+drat+wt,data=mtcars,
    + main="basic scatter plot matrix")

    主对角线的上方和下方的六幅散点图是相同的,选项upper.panel =NULL将只生成下三角的图形。

    car包中的scatterplotMatrix()函数也可以生成散点图矩阵,并有以下可选操作:

    以某个因子为条件绘制散点图矩阵;

    包含线性和平滑拟合曲线;

    在主对角线放置箱线图、密度图或者直方图;

    在各单元格的边界添加轴须图。

    > library(car)
    > scatterplotMatrix(~mpg+disp+drat+wt,data=mtcars,spread=FALSE,
    + lty.smooth=2,main="scatter plot matrix via car package")
    

      

    线性和平滑(loess)拟合曲线被默认添加,主对角线处添加了核密度曲线和轴须图。spread = FALSE选项表示不添加展示分散度和对称信息的直线,lty.smooth =2设定平滑(loess)拟合曲线使用虚线而不是实线。

    scatterplotMatrix()函数的另一个用法

    > library(car)#主对角线的核密度曲线改成了直方图,并且直方图是以各车的气缸数为条件绘制的。
    > scatterplotMatrix(~mpg+disp+drat+wt|cyl,data=mtcars,spread=FALSE,
    + diagonal="histogram",main="scatter plot matrix via carpackage")
    

      

     

    主对角线的核密度曲线改成了直方图,并且直方图是以各车的气缸数为条件绘制的。图形包含主对角线中的直方图以及其他部分的线性和平滑拟合曲线。另外,子群(根据气缸数)通过符号类型和颜色来区分标注默认地,回归直线拟合整个样本,包含选项by.groups = TRUE将可依据各子集分别生成拟合曲线。

    gclus包中的cpairs()函数提供了一个有趣的散点图矩阵变种。它含有可以重排矩阵中变量位置的选项,可以让相关性更高的变量更靠近主对角线。该函数还能对各单元格进行颜色编码来展示变量间的相关性大小。首先考察相关性:

    >cor(mtcars[c("mpg","wt","disp","drat")])

    mpg wt disp drat

    mpg 1.0000000 -0.8676594-0.8475514 0.6811719

    wt -0.8676594 1.0000000 0.8879799 -0.7124406

    disp -0.8475514 0.8879799 1.0000000 -0.7102139

    drat 0.6811719 -0.7124406-0.7102139 1.0000000

    gclus包生成的散点图矩阵

    > library(gclus)
    > mydata<-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="variablesordered and colored by correlation")

    散点图矩阵将根据新的变量顺序(myorder)和颜色列表(mycolors)绘图、上色,gap选项

    使矩阵各单元格间的间距稍微增大一点。相关性最高的变量对是车重与排量,以及每加仑英里数与车重(标了红色,并且离主对角线最近)

    11.1.2 高密度散点图

    当数据点重叠很严重时,用散点图来观察变量关系就显得“力不从心”了。

    > set.seed(1234)
    > n<-10000
    > c1<-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 10000 observations"))

    smoothScatter()函数可利用核密度估计生成用颜色密度来表示点分布的散点图,利用光平滑密度估计绘制的散点图。此处密度易读性更强:

    > with(mydata, smoothScatter(x,y,main="scatter plot with 10000observations"))

    hexbin包中的hexbin()函数将二元变量的封箱放到六边形单元格中(图形比名称更直观)

    > library(hexbin)
    > with(mydata,{bin<-hexbin(x,y,xbins=50)plot(bin,main="hexagonalbinning with 
     10000 boservations")})

    IDPmisc包中的iplot()函数也可通过颜色来展示点的密度(在某特定点上数据点的

    数目)

    > library(IDPmisc)
    > with(mydata,{ iplot(x,y,main="imagescatter plot with
     color indicating density") })

    11.1.3 三维散点图

    假使你对汽车英里数、车重和排量间的关系感兴趣,可用scatterplot3d中的

    scatterplot3d()函数来绘制它们的关系。Scatterplot3d(x,y,z) x被绘制在水平轴上,y被绘制在竖直轴上,z被绘制在透视轴上。

    > library(scatterplot3d)
    > attach(mtcars)
    > scatterplot3d(wt,disp,mpg,main="basic 3d scatter plot")

    注:如出现Error in plot.new() : figure margins too large 重启Rstudio即可

    satterplot3d()函数提供了许多选项,包括设置图形符号、轴、颜色、线条、网格线、突

    出显示和角度等功能

    > scatterplot3d(wt,disp,mpg, pch=16,highlight.3d=TRUE,type="h",main="3dscatter plot with vertical lines")

    添加一个回归面

    > s3d<-scatterplot3d(wt,disp,mpg,pch=16, highlight.3d=TRUE, type="h", main="3dscatter plot with vertical lines")
    > fit<-lm(mpg~wt+disp)
    > s3d$plane3d(fit)

    旋转三维散点图

    用rgl包中的plot3d()函数创建可交互的三维散点图。你能通过鼠标对图形进

    行旋转。函数格式为:plot3d(x,y,z)

    其中xyz是数值型向量,代表着各个点。你还可以添加如col和size这类的选项来分别控制

    点的颜色和大小。

    > library(rgl)
    > attach(mtcars)
    > plot3d(wt,disp,mpg,col="red",size=5)

     

    也可以使用Rcmdr包中类似的函数scatter3d():

    > library(Rcmdr)
    > attach(mtcars)
    > scatter3d(wt,disp,mpg)

     

    scatter3d()函数可包含各种回归曲面,比如线性、二次、平滑和附加等类型。图形默认添

    加线性平面。另外,函数中还有可用于交互式识别点的选项。

    11.1.4 气泡图

    三维散点图来展示三个定量变量间的关系。现在介绍另外一种思路:先创建一个二维散点图,然后用点的大小来代表第三个变量的值。这便是气泡图(bubble plot)。

    你可用symbols()函数来创建气泡图。该函数可以在指定的(x, y)坐标上绘制圆圈图、方形

    图、星形图、温度计图和箱线图。以绘制圆圈图为例:

    Symbols(x,y,circle=radius)

    其中xyradius是需要设定的向量,分别表示xy坐标和圆圈半径。

    用面积而不是半径来表示第三个变量,那么按照圆圈半径的公式(r = A / π )变

    换即可:Symbols(x,y,circle=sqrt(z/pi))z即第三个要绘制的变量。

    > attach(mtcars)
    > r<-sqrt(disp/pi)
    > symbols(wt,mpg,circle=r,inches=.3,#比例因子,控制着圆圈大小(默认最大圆圈为1英寸)
    + fg="white",bg="lightblue", main="bubble plotwith point size
     proportional to displacement", ylab="miles pergallon", xlab="weight of car(lbs/1000")
    > text(wt,mpg,rownames(mtcars),cex=.6)#可选函数,此处用来添加各个汽车的名称
    > detach(mtcars)


    求关注 求扩散亲朋好友

  • 相关阅读:
    在JBuilder8中使用ANT
    协程初探
    JavaScript编写了一个计时器
    Codeforces Round #272 (Div. 1)D(字符串DP)
    UI測试内容
    我为什么做程序猿訪谈录
    使用Java高速实现进度条
    做web项目时对代码改动后浏览器端不生效的应对方法(持续更新)
    将markdown格式转化为bootstrap风格html
    char* 和char[]的差别
  • 原文地址:https://www.cnblogs.com/jpld/p/4463595.html
Copyright © 2020-2023  润新知