我们学习了各种各样的图形,它们大部分都是利用R语言的基础图形系统创建的。在R语言中,除了基础图形系统之外,R语言还提供了grid、lattice和ggplot2这三种图形系统,它们克服了R基础图形系统的低效性,大大扩展了的R语言的绘图能力。
grid图形系统可以很轻松地控制图形基础单元,给予编程者创作图形极大的灵活性。lattice包通过一维、二维或三维条件绘图来对多元变量关系进行直观展示。ggplot2包则基于一种全面的图形语法,提供了一种全新的图形创建方式。因为grid没有提供生成统计图形以及完整绘图的函数,因此数据分析师很少直接采用grid包来分析数据。这里重点介绍lattice和ggplot2图形系统。
四种图形系统的载入方式有所不同,基础图形函数可以自动调用,grid和lattice函数的调用必须要加载相应的包(library(lattice)),要调用ggplot2函数需要下载并安装该包(install.packages("ggplot2")),第一次使用还要引入加载该包(library(ggplot2))。
lattice包为单变量和多变量数据的可视化提供了一个全面的图形系统,它可以轻松生成栅栏图形。
在一个或多个其他变量的条件下,栅栏图形展示某个变量的分布或与其他变量间的关系。lattice包中singer数据集包含了合唱成员的身高和声部数据,让我们考虑以下问题:纽约合唱团歌手的身高随着他们所属的声部如何变化?来看以下代码:
> library(lattice)
> histogram(~height|voice.part, data=singer,main="Distribution of Heights by Voice Pitch", xlab="Height (inches)")
height是因变量,voice.part被称作条件变量,这段代码对八个声部的每一个都创建了一个直方图。图形显示了男高音和男低音比女低音和女高音身高要高。
在栅栏图形中,单个面板要依据条件变量的各个水平来创建。如果指定了多个条件变量,那么一个面板将按照各个因子水平的组合来创建。然后面板将被排成一个阵列以进行比较。每个面板在一个区域都会有一个标签,这里的区域称作条带区域。随后我们可以看到,用户可对每个面板中展示的图形、条带的格式和位置、面板的摆放、图例的内容和位置以及其他许多图形特征进行控制。
lattice包提供了丰富的函数,可生成单变量图形(点图、核密度图、直方图、柱状图和箱线图)、双变量图形(散点图、带状图和平行箱线图)和多变量图形(三维图和散点图矩阵)。
各种高级绘图函数都服从以下格式:
graph_function(formula, data=, options)
- graph_function为图形类型函数;
- formula指定要展示的变量和条件变量;
- data指定一个数据框;
- options是逗号分隔函数,用来修改图形的内容、摆放方式和标准。
lattice包中常见的图形类型函数如下:
lattice包中图形函数常见的配置选项如下:
设小写字母代表数值型变量,大写字母代表类别型变量(因子)。在高级绘图函数中,表达式形式通常为:
y ~ x | A * B
在竖线左边的变量称为主要变量,右边的变量称为条件变量。主要变量将变量映射到每个面板的坐标轴上,此处,y ~ x表示变量分别映射到纵轴和横轴上。对于单变量绘图,用~x代替y ~ x即可;对于三维图形,用z ~ x*y代替y ~ x,而对于多变量绘图(散点图矩阵或平行坐标图)用一个数据框代替y ~ x即可。注意,条件变量总是可以自行挑选的。
根据上述逻辑, ~ x | A即展示因子A各个水平下水平下数值型变量x的分布情况; y ~ x | A*B即展示因子A和B各个水平下组合下数值型变量x和y间的关系。而A ~ x则表示类别型变量A在纵轴上,数值型变量x在横轴上进行展示。 ~ x表示仅展示数值型变量x。
下面以数据框mtcar为例,我们使用以下代码进行lattice图形的绘制:
library(lattice)
attach(mtcars)
gear <- factor(gear, levels = c(3,4,5),labels = c("3 gears", "4 gears", "5 gears"))
cyl <- factor(cyl, levels = c(4,6,8), labels = c("4 cylinders","6 cylinders","8 cylinders"))
densityplot(~mpg,main="Density Plot", xlab = "Miles per Gallon")
densityplot(~mpg | cyl,main="Density Plot", xlab = "Miles per Gallon")
xyplot(mpg ~ wt | cyl * gear, main="Scatter Plots by Cylinders and Gears",xlab = "Car Weight",ylab = "Miles per Gallon")
cloud(mpg~wt*qsec | cyl, main="3D Scatter Plots by Cylinders")
dotplot(cyl ~ mpg | gear, main="Dot Plots by Number of Gears and Cylinders", xlab="Miles Per Gallon")
splom(mtcars[c(1,3,4,5,6)], main="Scatter Plot Matrix for mtcars Data")
detach(mtcars)
我们可以存储和操作lattice包中的高级绘图函数生成的图形。来看下列代码:
library(lattice)
mygraph <- densityplot(~height | voice.part, data=singer)
plot(mygraph)
它创建了一个栅栏密度图,并存储在mygraph对象中。但是此时不会展示任何图形,只有调用plot(mygraph)或(mygraph)时才会展示图形。
plot(mygraph)
我们可以通过options轻松地修改lattice图形对象,另外还可以使用update()函数来修改lattice对象,例如:
update(mygraph, col="red", pch=16, cex=.8, jitter=.05, lwd=2)
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/rfx/1326.html