zoukankan      html  css  js  c++  java
  • R语言实战(七)图形进阶

    本文对应《R语言实战》第11章:中级绘图;第16章:高级图形进阶

    基础图形一章,侧重展示单类别型或连续型变量的分布情况;中级绘图一章,侧重展示双变量间关系(二元关系)和多变量间关系(多元关系)的绘图;高级绘图进阶一章介绍四种图形系统,主要介绍lattice和ggplot2包。

    =========================================================================

    散点图:

    主要内容:把多个散点图组合起来形成一个散点图矩阵,以便可以同时浏览多个二元变量关系;数据点重叠的解决途径;通过添加第三个连续型变量,扩展到三维。

    散点图矩阵:

    pairs()函数

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

      

    car包中的scatterplotMatrix()函数:

    library(car)
    scatterplotMatrix( ~ mpg + disp + drat + wt, data = mtcars, spread = FALSE, lty.smooth = 2)
    

      

    默认添加线性和平滑曲线,主对角线处添加核密度曲线和轴须图;spread选项设定是否添加展示分散度和对称信息的直线;lty.smooth设定拟合曲线使用的线形状。

    另一个示例:

    library(car)
    scatterplotMatrix( ~ mpg + disp + drat + wt | cyl, data = mtcars, spread = FALSE, diagonal = “histogram”)
    

      

    gclus包中的cpairs()函数提供了一个散点图矩阵变种,可以重排矩阵中变量位置,让相关度更高的变量更靠近主对角线,并对各单元格进行颜色编码来展示变量间的相关性大小。这里将主对角线的核密度曲线改成了直方图,并且直方图是以cyl为条件绘制的。

    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)
    

      


    高密度散点图:数据点重叠的解决途径之一 

    smoothScatter()函数可利用核密度估计生成用颜色密度来表示点分布的散点图:

    with(mydata, smoothScatter(x, y, main = “Scatterplot Colored by Smoothed Densities”))

    hexbin包中的hexbin()函数将二元变量的封箱放到六边形单元格中:

    library(hexbin)
    with(mydata, {
        bin <- hexbin(x, y, xbins = 50)
        plot(bin, main = “Hexagonal Bining with 10,000 Observations”)
    })
    

      

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

    library(IDPmisc)
    with(mydata, iplot(x, y, main = “Image Scatter Plot with Color Indicating Density”))
    

      


    三维散点图: 

    scatterplot3d包中的scatterplot3d()函数:

    library(scatterplot3d)
    attach(mtcars)
    scatterplot3d(wt, disp, mpg, main = “Basic 3D Scatter Plot”)
    

      

    旋转三维散点图:
    rgl包中的plot3d()函数创建可交互的三维散点图。Rcmdr包中有类似的函数scatter3d()。

    气泡图:

    先创建一个二维散点图,然后用点的大小来代表第三个变量的值。注意默认为半径,如需使用面积需要进行变换。

    symbols(x, y, circle = radius)
    #使用面积表示第三个值
    symbols(x, y, circle = sqrt(z/pi))
    

      

    折线图:

    可用plot(x, y, type = )或者lines(x, y, type = )函数来创建

    p

    只有点

    l

    只有线

    o

    实心点和线(即线覆盖在点上)

    b, c

    线连接点(c时不绘制点)

    s, S

    阶梯线

    h

    直方图式的垂直线

    n

    不生成任何点和线(通常用来为后面的命令创建坐标轴)

    相关图:

    将相关系数矩阵进行可视化。corrgram包中的corrgram()函数:

    library(corrgram)
    corrgram(mtcars, order = TRUE, lower.panel = panel.shade, upper.panel = panel.pie, text.panel = panel.txt)
    

      


    上三角的单元格用饼图展示了相同的信息,同样的,蓝色表示正相关,红色表示负相关;相关性大小由被填充的饼图块的大小来展示;正相关性将从12点钟处开始顺时针填充饼图,负相关性则逆时针方向填充饼图。图形意义:默认情况下,下三角单元格中,蓝色和从左下指向右上的斜杠表示单元格中的两个变量呈正相关;红色和从左上指向右下的斜杠表示变量呈负相关;色彩越深,饱和度越高,变量相关性越大。

    order = TRUE时相关矩阵将使用主成分分析法对变量重排序,可以使二元变量的关系模式更为明显。panel可以设定面板使用的元素类型:lower.panel和upper.panel设置主对角线下和上的元素类型;text.panel和diag.panel控制主对角线元素类型,详细值如下表:

    位置

    面板选项

    描述

    非对角线

    panel.pie

    用饼图的填充比例表示相关性大小

    panel.shade

    用阴影的深度来表示相关性大小

    panel.ellipse

    绘制置信椭圆

    panel.pts

    平滑拟合曲线绘制散点图

    主对角线

    panel.minmax

    输出变量的最大最小值

    panel.txt

    输出变量的名字

    马赛克图:

    用于展示类别型变量间的关系。马赛克图中,嵌套矩形面积正比于单元格频率,其中该频率即多维列联表中的频率。颜色和阴影可表示拟合模型的残差值。常用vcd包中的mosaic()函数实现(比基础安装中的mosaicplot()函数有更多的扩展功能)。

    图形中隐藏大量信息,可以关注各个矩形的相对宽度和高度来解释。颜色和阴影提供了拟合模型的残差值:蓝色代表在假定类别与条件无关的情况下,该类别的数量高于预期值,红色则相反。

    =========================================================================

    R中有四种图形系统:基础图形系统、grid图形系统、lattice包、ggplot2包。

    lattice包:

    通常格式:graph_function(formula, data = , options)

    graph_function为函数名,formula指定要展示的变量和条件变量;data指定数据框;options是逗号分隔参数,修改格式等。

    一般的,下表中小写字符代表数值型变量,大写字符代表类别型变量。

    图形类型

    函数

    表达式示例

    三维等高线图

    contourplot()

    z ~ x*y

    三维水平图

    levelplot()

    z ~ y*x

    三维散点图

    cloud()

    z ~ x*y|A

    三维线框图

    wireframe()

    z ~ y*x

    条形图

    barchart()

    x ~ A或A ~ x

    箱线图

    bwplot()

    x ~ A或A ~ x

    点图

    dotplot()

    ~ x | A

    直方图

    histogram()

    ~ x

    核密度图

    densityplot()

    ~ x | A*B

    平行坐标图

    parallel()

    dataframe

    散点图

    xyplot()

    y ~ x | A

    散点图矩阵

    splom()

    dataframe

    带状图

    stripplot()

    A ~ x或x ~ A

    options:

    aspect

    数值,设定每个面板中图形的宽高比

    col/pch/lty/lwd

    向量,分别设定图形中的颜色、符号、线条类型和线宽

    Groups

    用来分组的变量(因子)

    index.cond

    列表,设定面板的展示顺序

    key(或auto.key)

    函数,添加分组变量的图例符号

    layout

    两元素数值型向量,设定面板的摆放方式(行数和列数);

    如有需要,可以添加第三个元素,以指定页数

    Main/sub

    字符型向量,设定主标题和副标题

    Panel

    函数,设定每个面板要生成的图形

    Scales

    列表,添加坐标轴标注信息

    Strip

    函数,设定面板条带区域

    Split/position

    数值型向量,在一页上绘制多幅图形

    Type

    字符型向量,设定一个或多个散点图的绘图参数

    (如p=点,l=线,r=回归,smooth=平滑曲线,g=格点)

    xlab/ylab

    字符型向量,设定横轴和纵轴标签

    xlim/ylim

    两元素数值型向量,分别设定横轴和纵轴的最小和最大值

    高级绘图中表达式的通常格式:

    y ~ x | A * B

    竖线左边的变量称为主要变量,右边称为条件变量。主要变量即为图形的两个坐标轴,其中y在纵轴上,x在横轴上。变形:单变量绘图,用 ~ x 即可;三维绘图,用z ~ x*y;多变量绘图,使用数据框代替y ~ x即可。

    条件变量的用法:~ x | A表示因子A各个水平下数值型变量x的分布情况;y ~ x | A * B表示因子A和B各个水平组合下数值型变量x和y之间的关系。A ~ x表示A在纵轴上展示,x在横轴上展示。

    条件变量为连续型变量时,要先将其转换成离散型变量。一种方法是使用cut()函数,另外可以使用lattice包中的函数将连续型变量转化为瓦块(shingle)数据结构,这样,连续型变量可以被分割为一系列(可能)重叠的数值范围。

    myshingle <- equal.count(x, number = #, overlap = proportion)
    #连续型变量x将会被分割为#个区间,重叠度为proportion,每个区间内观测数相等
    

      

    这样就可以使用这个变量作为条件变量了

    分组变量:将每个条件变量产生的图形叠加到一起,在同一幅图中展示,只需要将条件变量放到绘图函数中的group声明中即可。

    面板函数:自定义面板的各个选项,然后在绘制图形的函数中调用即可。

    图形参数:查看默认的图形参数使用trellis.par.get()函数;修改这些参数使用trellis.par.set()函数;show.settings()函数可以展示当前的图形参数设置情况。

    页面摆放:lattice无法使用par()函数,因此需要将图形存储到对象中,然后利用plot()函数中的split = 或position = 选项来进行控制。

    #split方法
    library(lattice)
    graph1 <- histogram(…)
    graph2 <- densityplot(…)
    plot(graph1, split = c(1,1,1,2))
    plot(graph2, split = c(1,2,1,2), newpage = FALSE)
    
    #position方法
    library(lattice)
    graph1 <- histogram(…)
    graph2 <- densityplot(…)
    plot(graph1, position = c(0, .3, 1, 1))
    plot(graph2, position = c(0, 0, 1, .3), newpage = FALSE)
    

      


    split的方法,将第一幅图放置到第二幅图的上面:第一个plot()函数把页面分割为一列两行的矩阵,并将图形放置到第一列第一行中;第二个plot()函数将图形放置到第一列第二行中,由于plot()函数默认启动新的页面,因此使用newpage = FALSE选项。position方法,设定坐标,原点位于页面左下角,x轴和y轴维度范围为(0, 1),position = (xmin, ymin, xmax, ymax)。 

    ggplot2包:

    只介绍一种较为简单的绘图方式:qplot()函数

    qplot(x, y, data = , color = , shape = , size = , alpha = , geom = , method = , fomula = , facets = , xlim = , ylim = , xlab = , ylab = , main = , sub = )

    选项

    描述

    alpha

    元素重叠的alpha透明度,数值为0(完全透明)到1(完全不透明)间的分数

    color/shape/size/fill

    把变量的水平与符号颜色、形状或大小联系起来,color为线的颜色,fill为填充颜色

    data

    指定一个数据框

    facets

    指定条件变量,创建一个栅栏图

    geom

    设定定义图形类型的几何形状

    main/sub

    字符向量,设定标题或副标题

    method/formula

    若geom = “smooth”,则会默认添加一条平滑拟合曲线和置信区间,观测数大于1000时,需要调用更高效的平滑拟合算法,包括回归lm、广义可加模型gam、稳健回归rlm。formula指定拟合形式,注意formula = y ~ x使用的就是字母y和x而不是变量名。

    对于method = “gam”要加载mgcv包,method = “rml”要加载MASS包

    x/y

    指定摆放在水平轴和竖直轴的变量。对于单变量图形(如直方图),则省略y

    xlab/ylab

    字符向量,设定横轴和纵轴标签

    xlim/ylim

    二元素数值型向量,分别指定横轴和纵轴的最小值和最大值

    交互式图形:

    主要介绍的软件包:playwith, latticist, iplots, rggobi

    基础安装中的交互:鉴别点函数:identify()函数

    plot(mtcars$wt, mtcars$mpg)
    identify(mtcars$wt, mtcars$mpg, labels = row.names(mtcars))
    

      


    许多包中的图形函数都可以应用该方法进行标注,但是lattice或ggplot2图形无法使用该方法。 

    playwith包:

    playwith()包允许用户识别和标注点、查看一个观测所有的变量值、缩放和旋转图形、添加标注(文本、箭头、线条、矩形、标题和标签)、修改视觉元素(颜色、文本大小等)、应用先前存储的图形风格,以及以多种格式输出图形结果。

    playwith()既对R基础图形有效,也对lattice和ggplot2图形有效,但是并不是所有都可以用。

    latticist包:

    www.deducer.org

    可以与playwith整合到一起:

    library(latticist)
    mtcars$cyl <- factor(mtcars$cyl)
    mtcars$gear <- factor(mtcars$gear)
    latticist(mtcars, use.playwith = TRUE)
    

      


     作用是可以通过栅栏图方式探索数据集。

    iplots包:

    http://rosuda.org/iplots/

    playwith包和latticist包只能与单幅图形交互,而iplots包提供的交互方式则有所不同。该包提供了交互式马赛克图、柱状图、箱线图、平行坐标图、散点图和直方图,以及颜色刷,并可将他们结合在一起绘制。也就是说可通过鼠标对观测点进行选择和识别,并且对其中一幅图形的观测点突出显示时,其他被打开的图形将会自动突出显示相同的观测点。

    ibar()

    交互式柱状图

    ibox()

    交互式箱线图

    ihist()

    交互式直方图

    imap()

    交互式地图

    imosaic()

    交互式马赛克图

    ipcp()

    交互式平行坐标图

    iplot()

    交互式散点图

    roggobi包:

    开源软件GGobi(www.ggobi.org)

    用法:首先要下载该软件,然后在R中安装rggobi包,即可利用R中运行GGobi

  • 相关阅读:
    NGBOSS转型在即:COTS初露锋芒
    [原]CmsEasy安装,后台“内容管理”页面空白
    CentOS5安装mcrypt问题
    [转]Grub安装修复
    [转]BOSS3接近尾声
    多渠道整合开启NGBOSS第一步
    [原][转]TUXEDO与ORACLE数据库的互连
    [译]Oracle Data Cartridge| Oracle数据筒介绍
    [译]ORACLE数据弹药桶(Data Cartridge)简介
    [原]再说精度用于显示的数字出现精度问题的处理(Perl/Java)
  • 原文地址:https://www.cnblogs.com/gyjerry/p/6481048.html
Copyright © 2011-2022 走看看