在R中,如何实现在一幅图中绘制多个子图呢,特别是当子图是以群组(group)来归类的时候?下面提供两种解决方案:
先虚构一组数据:
[plain]
Group Class Num
A X 80
A Y 30
B X 20
B Y 60
C X 70
C Y 80
D X 90
D Y 40
[/plain]
我们把它保存在“data.txt”文件中,每列以制表符分隔。
绘图要求:绘制bar图;Group为群组,即四个小图;Class为横轴;Num为纵轴。
使用lattice包
[code lang="R"]
library(lattice)
data <- read.table("data.txt",header=T)
barchart(data$Num~data$Class|data$Group)
[/code]
输出结果:
使用matrix分割图纸
[code lang="R"]
data <- read.table("data.txt",header=T)
layout(matrix(1:4, 2, 2,byrow=T))
barplot(data[data[,1]=="A",]$Num,main="A",col="lightblue",names.arg=c("X","Y"))
barplot(data[data[,1]=="B",]$Num,main="B",col="lightblue",names.arg=c("X","Y"))
barplot(data[data[,1]=="C",]$Num,main="C",col="lightblue",names.arg=c("X","Y"))
barplot(data[data[,1]=="D",]$Num,main="D",col="lightblue",names.arg=c("X","Y"))
#为简化代码,也可以使用循环
#for(i in levels(as.factor(data$Group))){
#barplot(data[data[,1]==i,]$Num,main=i,col="lightblue",names.arg=c("X","Y"))
#}
[/code]
输出结果:
原文来自:http://yixf.name/2011/03/14/%E5%9C%A8%E4%B8%80%E5%B9%85%E5%9B%BE%E4%B8%AD%E7%BB%98%E5%88%B6%E5%A4%9A%E4%B8%AA%E5%AD%90%E5%9B%BE/