上次我们学习了lattice包的相关内容,我们知道,当在lattice绘图公式中增加调节变量时,该变量每个水平的独立面板就会产生。如果想添加的结果和每个水平正好相反,可以指定该变量为分组变量。
如果我们想利用核密度图展示使用手动和自动变速器时汽车油耗的分布,我们如何做到呢?
mtcars$transmission<-factor(mtcars$am,levels=c(0,1), labels=c("Automatic","Manual")) densityplot(~mpg,data=mtcars,group=transmission, main="MPG Distribution by Transmission Type",xlab="Miles per Gallon", auto.key=TRUE)
- 默认情况下,group=选项添加分组变量每个水平的图,点会被绘制成空心圆,线为实线,水平信息用不同的颜色表示。
- 选项auto.key=TRUE创建了一个基本的图例并把它放在图的上方。
我们可以通过在列表中指定选项对自动的键值进行有限的修改。例如:
densityplot(~mpg,data=mtcars,group=transmission, main="MPG Distribution by Transmission Type",xlab="Miles per Gallon", auto.key=list(space="right",columns=1,title="Transmission"))
此代码将图例放在图的右侧,在单个列中呈现关键字,并添加了一个图例标题。
下面我们一起进行更深入的学习。
那么带有分组变量和自定义图例的核密度估计怎么实现呢?
mtcars$transmission<-factor(mtcars$am,levels=c(0,1), labels=c("Automatic","Manual"))
进行指定颜色、线、点:
colors <- c("red", "blue") lines <- c(1,2) points <- c(16, 17)
实现自定义图例:
key.trans<-list(title="Transmission",space="bottom",columns=2, text=list(levels(mtcars$transmission)), points=list(pch=points,col=colors), lines=list(col=colors,lty=lines),cex.title=1,cex=0.9)
绘制密度图:
densityplot(~mpg,data=mtcars,group=transmission, main="MPG Distribution by Transmission Type",xlab="Miles per Gallon", pch=points,lty=lines,col=colors,lwd=2,jitter=0.005,key=key.trans)
这里绘图符号、线条类型和颜色都被指定为向量。
每个向量的第一个元素应用到分组变量的第一个水平中,第二个元素应用到分组变量的第二个水平中,以此类推。
创建列表对象以保存图例选项。
相同的图类型、线条类型和颜色由densityplot()函数指定。
代码是不是很简单?那我们再来讨论一下在单个图中包含分组和调节变量的例子。
例:Plant是包含12种植物在7种二氧化碳浓度(conc)下的二氧化碳吸收率(uptake)。6种植物来自魁北克,6种来自密西西比。每个产地有3种植物在冷藏条件下研究,3种在非冷藏条件下研究。
在这个例子中,Plant是分组变量,Type(魁北克/密西西比)和Treatment(冷藏/非冷藏)是调节变量。
来一起看看吧。
带有分组和调节变量以及自定义图例的xyplot函数怎么实现?
windows() 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)
注意,这里使用\n让我们将标题分成两行,使用expression()函数是为了将数学符号添加到坐标轴标签上。通过col=选项指定一组颜色来对组进行区分。我们已经通过传递到高水平的函数或是面板函数的选项更改了图表中的图形元素。不过这样的变化只在调用函数时起作用。
在下一节中,我们将回顾能持续改变交互式进程或批处理图形参数的方法。期待我们下次不见不散哟。