使用lattice进行高级绘图-- lattice 包(核密度图、箱线图、散点图、3D散点图、点图、散点图矩阵)

使用lattice进行高级绘图-- lattice 包

lattice包提供了用于可视化单变量和多变量数据的一整套图形系统。许多用户转向使用lattice包是因为它能很容易地生成网格图形。

网格图形能够展示变量的分布或变量之间的关系,每幅图代表一个或多个变量的各个水平。

思考下面的问题:纽约合唱团各声部的歌手身高是如何变化的?

lattice包在singer数据集中提供了身高和声部的数据。在下面的代码中:

library(lattice)

histogram(~height | voice.part, data = singer,

          main="Distribution of Heights by Voice Pitch",

          xlab="Height (inches)")

 

结果分析:Soprano表示女高音,Tenor表示男高音,Alto表示女低音,Bass表示男低音,从图上可以看出,似乎男高音和男低音比女低音和女高音的身高更高。

在网格图中,调节变量的每个水平生成一个独立的面板。如果指定多个调节变量,这些变量因子水平的每个组合都会生成一个面板。在每个面板名为条带(strip)的区域中会提供一个标签,比如上图中的Soprano1Tenor1等等。

lattice包提供了大量的函数来产生单因素图(点图、核密度图、直方图、条形图、箱线图),二元图(散点图、条形图、平行箱线图)和多元图(3D图、散点图矩阵)。每个高水平的画图函数都服从下面的格式:

graph_function(formula, data=, options)

其中:

q graph_function是一个函数;

q formula指定要展示的变量和任意的调节变量;

q data=指定数据框;

q options是用逗号分隔的参数,用来调整图形的内容、安排和注释。

我们假定小写字母代表数值型变量,大写字母代表分类型变量(因子)。高水平的画图函数通常采取的格式是:y ~ x | A * B

其中竖线左侧的变量称为主要变量(primary variable),右边的变量称为调节变(conditioning variable)。主要变量将变量映射到每个面板的轴上。这里的y~x分别描述了在纵轴和横轴上的变量。对于单变量图,用~x代替y~x;对于3D图,用z~x*y代替y~x;对于多变量图(散点图矩阵或平行坐标曲线图),用数据框来代替y~x

按照这个逻辑,~x|A表示因子A每个水平的数值变量xy~x|A*B表示在给定因子AB的水平后,数值变量yx的关系。A~x表示在纵轴上的分类变量A和横轴上的数值变量x~x表示数值型变量x

lattice包中的图类型和相应的函数

 

注:在这些公式中小写字母表示数值型变量,大写字母表示分类型变量。

一个基于mtcars数据框中的汽车数据(里程、车重、挡数、汽缸数等)。我们可以变换公式并查看结果
1lattice画图例子

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表示数值型变量mpg

densityplot(~mpg | cyl,

            main="Density Plot by Number of Cylinders",

            xlab="Miles per Gallon")

 

结果分析:densityplot是画核密度图~mpg | cyl表示因子cyl每个水平的数值变量mpg

bwplot(cyl ~ mpg | gear,

       main="Box Plots by Cylinders and Gears",

       xlab="Miles per Gallon", ylab="Cylinders")

 

结果分析:bwplot是箱线图,cyl ~ mpg | gear表示给定(分类)因子gear后,在纵轴cyl 和横轴 mpg上的变量关系。

xyplot(mpg ~ wt | cyl * gear,

       main="Scatter Plots by Cylinders and Gears",

       xlab="Car Weight", ylab="Miles per Gallon")

 

结果分析:xyplot是散点图,mpg ~ wt | cyl * gear表示在给定因子cylgear的水平后,数值变量mpgwt的关系。

cloud(mpg ~ wt * qsec | cyl,

      main="3D Scatter Plots by Cylinders")

 

结果分析:cloud是绘制3D散点图,mpg ~ wt * qsec | cyl表示对于3D图,用z~x*y代替y~x,表示给定(分类)因子cyl后,在yqsec xwtzmpg的变量关系。

dotplot(cyl ~ mpg | gear,

        main="Dot Plots by Number of Gears and Cylinders",

        xlab="Miles Per Gallon")

 

结果分析:dotplot是点图,cyl ~ mpg | gear表示给定(分类)因子gear后,在纵轴(分类变量)cyl 和横轴 mpg上的变量关系。

splom(mtcars[c(1, 3, 4, 5, 6)],

      main="Scatter Plot Matrix for mtcars Data")

 

结果分析:splom是散点图矩阵,绘制mtcars数据13456列之间的关系的散点图矩阵

detach(mtcars)

lattice包中的高水平画图函数能产生可保存和修改的图形对象。例如

library(lattice)

mygraph <- densityplot(~height|voice.part, data=singer)

创建了一个网格密度图,并把它保存为对象mygraph。但是没有图像展示。声明plot(mygraph)

(或仅仅是mygraph)将会展示出这幅图。

mygraph

 

lattice高水平画图函数的常见选项

                                                                           

我们也可以使用update()函数来调整lattice图形对象。继续歌手的例子,下面的代码:

newgraph <- update(mygraph, col="red", pch=16,

                   cex=.8, jitter=.05, lwd=2)

newgraph

 

结果分析:使用红色曲线和符号(color="red"),填充点(pch=16),更小(cex=.8)更高的抖动点(jitter=.05)和双倍厚度曲线(lwd=2)来改变mygraph。更改的结果保存在newgraph中。

posted @ 2021-08-17 21:34  zhang-X  阅读(1444)  评论(0编辑  收藏  举报