【问题标题】:How to create 2x2 bar plot - with side by side pairwise bar in R如何创建 2x2 条形图 - 在 R 中并排成对条形图
【发布时间】:2014-01-22 03:35:43
【问题描述】:

我有以下数据:

  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

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

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

有什么办法呢? 最好不使用外部库,如 ggplot 或 lattice。

【问题讨论】:

    标签: r plot


    【解决方案1】:

    我知道您正在尝试避免使用外部库,但 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)
    

    【讨论】:

      【解决方案2】:

      给你:

      进口:

      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)
      

      结果:

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-01
      相关资源
      最近更新 更多