在一幅图中绘制多个子图

在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为纵轴。

  1. 使用lattice包

  2. 1
    2
    3
    
    library(lattice)
    data <- read.table("data.txt",header=T)
    barchart(data$Num~data$Class|data$Group)

    输出结果:

    multi_lattice

    注意:仔细看一下ABCD的顺序,lattice默认是从左下角而不是左上角开始排序的。
    备注:至今还不知道如何更改lattice的排列顺序;如果你知道,请不吝赐教!

  3. 使用matrix分割图纸

  4. 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"))
    #}

    输出结果:

    multi_matrix

附录:数据(data)代码(multi.r)下载