使用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)的区域中会提供一个标签,比如上图中的Soprano1、Tenor1等等。
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每个水平的数值变量x。y~x|A*B表示在给定因子A和B的水平后,数值变量y和x的关系。A~x表示在纵轴上的分类变量A和横轴上的数值变量x。~x表示数值型变量x。
lattice包中的图类型和相应的函数
注:在这些公式中小写字母表示数值型变量,大写字母表示分类型变量。
一个基于mtcars数据框中的汽车数据(里程、车重、挡数、汽缸数等)。我们可以变换公式并查看结果:
(1)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表示数值型变量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表示在给定因子cyl和gear的水平后,数值变量mpg和wt的关系。
cloud(mpg ~ wt * qsec | cyl, main="3D Scatter Plots by Cylinders")
结果分析:cloud是绘制3D散点图,mpg ~ wt * qsec | cyl表示对于3D图,用z~x*y代替y~x,表示给定(分类)因子cyl后,在y轴qsec 和x轴 wt和z轴mpg的变量关系。
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数据第1、3、4、5、6列之间的关系的散点图矩阵。
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中。
本文来自博客园,作者:zhang-X,转载请注明原文链接:https://www.cnblogs.com/YY-zhang/p/15154345.html