如何创建2x2条形图 - 在R中并排成对条形图

时间:2014-01-22 03:35:44

标签: r plot

我有以下数据:

  Method    Metric        E0        E1        E2        E4
1     M1 Precision 0.9661017 0.9622642 1.0000000 0.9655172
2     M2 Precision 0.5330000 0.5350000 0.3780000 0.2140000
3     M1    Recall 0.9736842 0.9736842 0.9473684 0.9473684
4     M2    Recall 1.0000000 1.0000000 1.0000000 0.6670000

我想要做的是将以上数据创建到以下图中:

enter image description here

在此草图中,条形图的高度肯定不会反映上面的数据。

这样做的方法是什么? 可以使用ggplot或lattice之类的外部库。

2 个答案:

答案 0 :(得分:4)

我意识到你正试图避免使用外部库,但ggplot旨在简化这一过程。

library(ggplot2)
library(reshape2)

gg <- melt(df,id=1:2)
ggplot(gg) +
  geom_bar(aes(x=Method, y=value, fill=Metric), stat="identity",
           position="dodge")+facet_wrap(~variable)

答案 1 :(得分:3)

你走了:

导入:

dat <- read.table(text="Method  Metric  E0  E1  E2  E4
M1  Precision   0.9661017   0.9622642   1   0.9655172
M2  Precision   0.533   0.535   0.378   0.214
M1  Recall  0.9736842   0.9736842   0.9473684   0.9473684
M2  Recall  1   1   1   0.667",header=TRUE)

定义布局和一些颜色:

layout(matrix(c(1,2,5,3,4,5),nrow=2,byrow = TRUE))
#     [,1] [,2] [,3]
#[1,]    1    2    5
#[2,]    3    4    5
barcols <- c("red","blue")

生成一些图:

sapply(3:6, 
  function(x) {
    bp <- barplot(matrix(dat[,x],nrow=2,byrow=TRUE),beside=TRUE,col=barcols)
    title(main=names(dat[x]))
    axis(1,at=colMeans(bp),c("M1","M2"),lwd=0,lwd.tick=1)
    abline(h=0)
  }
)

添加图例:

plot(NA,xlim=c(0,1),ylim=c(0,1),ann=FALSE,axes=FALSE)
legend(0,0.6,c("Precision","Recall"),fill=barcols,cex=1.5)

结果:

enter image description here