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

原文地址:https://www.cnblogs.com/gyjerry/p/6481048.html