在R中,如何实现在一幅图中绘制多个子图呢,特别是当子图是以群组(group)来归类的时候?下面提供两种解决方案:
先虚构一组数据:
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
我们把它保存在“data.txt”文件中,每列以制表符分隔。
绘图要求:绘制bar图;Group为群组,即四个小图;Class为横轴;Num为纵轴。
-
使用lattice包
-
使用matrix分割图纸
1 2 3 | library(lattice) data <- read.table("data.txt",header=T) barchart(data$Num~data$Class|data$Group) |
输出结果:
注意:仔细看一下ABCD的顺序,lattice默认是从左下角而不是左上角开始排序的。
备注:至今还不知道如何更改lattice的排列顺序;如果你知道,请不吝赐教!
1 2 3 4 5 6 7 8 9 10 | 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")) #} |
输出结果:
附录:数据(data)及代码(multi.r)下载