R语言实战笔记--第十六章 高级图形进阶
来源:互联网 发布:网络蜘蛛 重访策略 编辑:程序博客网 时间:2024/05/17 03:33
R语言实战笔记–第十六章 高级图形进阶
标签(空格分隔): R语言 lattice 交互式图形
图形系统简介
本文为R语言实战中最后一章,介绍的是图形的高级进阶,主要讲述了两个包(lattice和ggplot2)以及交互式图形的做法,极大扩展了R的绘图功能,R中的图形系统主要有四种,base、grid、lattice和ggplot2。
base不需要加载,直接可以使用,之前几乎所有的统计绘图都使用了这个包;grid需要手动加载,但因这个包并没有统计图形,因此书中没有介绍这个包的使用;lattice需要手动加载,它和前面两个包都是预装在R中,并不需要安装,直接加载即可,它提供栅栏图形的绘制;ggplot2包需要先安装,然后第一使用时先加载,提供一个全面的、基于语法的、连贯一致的图形生成系统,允许用户创建新颖的、有创新性的数据可视化图形。
本书介绍的是后两个包。
lattice包
使用介绍
先看一下函数的使用方式
graph_function(formula,data=,options)graph_function:lattice包中的绘图函数;formula:图形公式,和绘图函数一起由下表给出;data:数据框options:以逗号分隔的参数,由第二个一给出。
表1:绘图函数及绘图公式
注:表中小写字母代表数值变量,大字字母代表类别型变量
表2:常见参数选项(options)
以下代码可以快速观看大部分图形的组成
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 by Number of Cylinders", xlab = "Miles per Gallon")bwplot(cyl ~ mpg | gear, main = "Box Plots by Cylinders and Gears", xlab = "Miles per Gallon", ylab = "Cylinders")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包中的函数来说,还可以把图形先赋给一个变量,然后通过plot画出,通过update更新!如下代码:
mygraph<-densityplot(~height|voice.part,data=singer)plot(mygraph)update(mygraph,col="red",pch=16,cex=0.8,jitter=0.05,lwd=2)
条件变量
如上面的例子,每个一条件变量就会创建出条件变量下各个水平的单独图形,这是强大之处,但条件变量通常是因子,如果想要把连续变量变成条件变量,就需要用到R中的cut函数来把连续变量打散为离散变量,而lattice包也提供一种称之为瓦块的数据结构,它可以使连续变量变量转变为系列(可能)重叠的数值范围中,如下代码:
myshingle<-equal.count(x,number=#,overlap=proportion)x为连续形向量,number为需要分为#个瓦块,overlap为重叠度proportion,可以为0#示例如下:displacement <- equal.count(mtcars$disp, number = 3, overlap = 0)xyplot(mpg ~ wt | displacement, data = mtcars, layout = c(3, 1), aspect = 1.5) #注意:layout后面的c(3,1)为3列1行!
面板函数
所谓面板,就是组图面板,它包括了面板中一些基础设置,比如散点图或者是线图,或者两个都有,也包括了背景色,栅格线条色,线形等等。
调用graph_function时,就默认调用了panel=panel.graph_function参数,比如下面两条命令是等效的。
densityplot(~height|voice.part,singer)densityplot(~height|voice.part,singer,panel=panel.densityplot)
可以通过help(panel.graph_function)查看对应的函数面板设置,以及help(panel.functions)查看可以在面板上增加更多的绘图设置。要更全面的函数需要去下载官方说明文档【lattice.pdf】
分组变量
注意和条件变量的区别,条件变量是把图形分开来绘制,而分组变量是把图形画在一个图上,但以不同图例标示,简单说明就是,条件变量在两幅图来画出15年和16年的销售增长图,而分组变量是在一幅图画出15年和16的销售增长图。
分组变量由参数group给出,注意的是,分组变量只能有一个,它可以包含不同的水平,也可以和条件变量一起使用。由以下代码给出示例:
colors <- "darkgreen"symbols <- c(1:12)linetype <- c(1:3)key.species <- list(title = "Plant", space = "right", text = list(levels(CO2$Plant)), points = list(pch = symbols, col = colors))xyplot(uptake ~ conc | Type * Treatment, data = CO2, group = Plant, type = "o", pch = symbols, col = colors, lty = linetype, main = "Carbon Dioxide Uptake\nin Grass Plants", ylab = expression(paste("Uptake ", bgroup("(", italic(frac("umol", "m"^2)), ")"))), xlab = expression(paste("Concentration ", bgroup("(", italic(frac(mL, L)), ")"))), sub = "Grass Species: Echinochloa crus-galli", key = key.species)
图形参数
图形参数,先认识一下三个函数,分别是获取参数函数trellis.par.get(),设置参数函数trellis.par.set(),以及展示函数show.settings(),以下代码给出修改过程:
show.settings() #以图形展示目前参数设置状态mysettings <- trellis.par.get()mysettings$superpose.symbol #展示参数内容,并不参与修改mysettings$superpose.symbol$pch <- c(1:10)trellis.par.set(mysettings)show.settings()
页面摆放
在之前,可以使用par的mfrow来设置页面的摆放,也可以使用layout(matrix(c()),nrow,ncol,byrow=T/F)函数来设置页面的摆放方式,在lattice包中,可以使用“图形对象”+“split(x,y,nx,ny)”+“newpage=F”来摆放图形;也可以使用position(xmin,ymin,xmax,ymax)来代替split来摆放图形
需要注意的是,R语言实战中又出了一个坑,这个坑是从英文版就存在的,lattice包中的split中就是以c(x,y,nx,ny)来代表图形位置参数,而书中即是把它写成c(row,col,nrow,ncol)的形式,明显是行列写反了!
library(lattice)graph1 <- histogram(~height | voice.part, data = singer, main = "Heights of Choral Singers by Voice Part")graph2 <- densityplot(~height, data = singer, group = voice.part, plot.points = FALSE, auto.key = list(columns = 4))plot(graph1, split = c(1, 1, 1, 2))plot(graph2, split = c(1, 2, 1, 2), newpage = FALSE)graph1 <- histogram(~height | voice.part, data = singer, main = "Heights of Choral Singers by Voice Part")graph2 <- densityplot(~height, data = singer, group = voice.part, plot.points = FALSE, auto.key = list(columns = 4))plot(graph1, position = c(0, 0.3, 1, 1))plot(graph2, position = c(0, 0, 1, 0.3), newpage = FALSE)
ggplot2包
R语言实战中并没有很详细的介绍这个包,而这个包的使用在书中只有qplot(quick plot)一个函数的使用方法,而实际上看,ggplot2作为R中最强大的包,它的使用都可以独立成书!此处mark一些网址,后面开单章学习ggplot2包吧。
知乎:如何使用ggplot2
搜狐:使用ggplot2经常问的10个问题
百度文库:30分钟学会ggplot2
官方手册:图形help
下面还是记录一下书中所述的简单函数qplot(2.0版以上的ggplot2中,qplot功能已被弱化,书中的qplot功能已有部分无法实现,比如下面公式中的method和formula两个参数已经被Hadley大神移除!
qplot(x,y,data=,color=,shape=,size=,alpha=,geom=,method=,formula=,facets=,xlim=,ylim=,xlab=,ylab=,main=,sub=)
各参数的用处如下表:
虽然部分功能已移除,但是也不防看看这些代码来感受一下ggplot2的强大!
\# --ggplot2--\# box plots examplelibrary(ggplot2)mtcars$cylinder <- as.factor(mtcars$cyl)qplot(cylinder, mpg, data=mtcars, geom=c("boxplot", "jitter"), fill=cylinder,main="Box plots with superimposed data points",xlab= "Number of Cylinders",ylab="Miles per Gallon")\# regression examplelibrary(ggplot2)transmission <- factor(mtcars$am, levels = c(0, 1), labels = c("Automatic", "Manual"))qplot(wt, mpg, data = mtcars, color = transmission, shape = transmission, geom = c("point", "smooth"), method = "lm", formula = y ~ x, xlab = "Weight", ylab = "Miles Per Gallon", main = "Regression Example")# bubble plot examplelibrary(ggplot2)mtcars$cyl <- factor(mtcars$cyl, levels = c(4, 6, 8), labels = c("4 cylinders", "6 cylinders", "8 cylinders"))mtcars$am <- factor(mtcars$am, levels = c(0, 1), labels = c("Automatic", "Manual"))qplot(wt, mpg, data = mtcars, facets = am ~ cyl, size = hp)\# density plot examplelibrary(ggplot2)data(singer, package = "lattice")qplot(height, data = singer, geom = c("density"), facets = voice.part ~ ., fill = voice.part)
交互式图形
与图形的交互功能有时是必须的,R关于这方面的包书中提到四个,分别是playwith、latticist、iplot和rggobi。
其实在此之前,已经使用到一个初级的交互,鉴别点交互:identify(),可以对图形中的点进行交互识别,直到点stop或按下Esc为止。
plot(mtcars$wt,mtcars$mpg)identify(mtcars$wt,mtcars$mpg,labels=row.names(mtcars))
playwith包
包提供了一个GTK+图形用户界面(GUI)界面,需要安装JGR后在JGR的console中运行library(),不过,一作出图之后就未响应,不知道什么原因。
latticist包
与playwith包一样,无法安装,看起来也不像介绍得很详细的样子,不管。
iplot包
整个交互式图形就这个包介绍得稍微详细一点。先看一下包中的作图函数:
如下代码可以作出六幅图形,可以在上面选择点,并作出一些参数调整,但遗憾的是,不能像identify一样标记异常点,labels也不能选择显示与否。
library(iplots)attach(mtcars)cylinders <- factor(cyl)gears <- factor(gear)transmission <- factor(am)ihist(mpg)ibar(gears)iplot(mpg, wt)ibox(mtcars[c("mpg", "wt", "qsec", "disp", "hp")])ipcp(mtcars[c("mpg", "wt", "qsec", "disp", "hp")])imosaic(transmission, cylinders)detach(mtcars)
rggobi包
它需要外部应用GGobi,而且也没有一个简介,要自己找资料
到目前为止,R语言实战的各章节已经学习完毕,当然,还有一些附录也是很值得学习的,比如说图形界面的学习等等很多功能。R的学习还没完结,仍需要进一步学习R中各项内容,比如导入导出专题、数据处理专题、数据检验专题等等,从整个数据分析的角度去回顾R中各功能的使用,同时也复杂数据分析技术!
- R语言实战笔记--第十六章 高级图形进阶
- R语言实战笔记--第三章 图形初阶
- R语言实战笔记--第六&七章 统计图形介绍及基本统计方法
- R语言实战笔记
- R语言实战笔记
- R语言实战笔记
- 《R语言实战》第四章学习笔记
- 《R语言实战》第五章学习笔记
- 《R语言实战》第六章学习笔记
- R语言实战笔记--第九章 方差分析
- R语言实战:高级数据管理(1)
- R语言实战之高级数据管理
- R语言实战笔记--第二章 数据类型及结构
- R语言实战笔记--第四&五章 数据管理
- R语言实战笔记--第八章 OLS回归分析
- R语言实战笔记--第十章 功效分析&样本量
- R语言实战笔记--第十三章 广义线性模型
- R语言实战笔记--第十四章 主成分和因子分析
- 指针学习笔记
- mysql入门
- Linux学习笔记(4)
- maven基础知识
- 希尔排序
- R语言实战笔记--第十六章 高级图形进阶
- Maven初识
- Myeclipse格式化快捷键不能用
- java代码去除时间段内的休息日
- python3+PyQt5 重新实现自定义数据拖放处理
- redis安装与使用
- 1.25 坦克大战
- 用程序员的思路炒股
- C语言10个基础代码(if-else)