如何在R 2x2条形图中显示X轴45度的所有标签

nev*_*int 1 plot r bar-chart

有以下数据:

Method  Metric  E0  E1  E2  E4
Method-XXX  Precision   0.9661017   0.9622642   1   0.9655172
Method-YYY  Precision   0.533   0.535   0.378   0.214
Method-ZZZ  Precision  0.595    0.843   0.77    0.689
Method-XZZZ Precision   0.573   0.698   0.53    0.708
Method-XZZZY    Precision   0.008   0.011   0.004   0.002
Method-XXX  Recall  0.9736842   0.9736842   0.9473684   0.9473684
Method-YYY     Recall   1   1   1   0.667
Method-ZZZ  Recall       0.833  1   1   1
Method-XZZZ Recall  1   1   1   1
Method-XZZZY    Recall  0.167   0.75    1   1
Run Code Online (Sandbox Code Playgroud)

我可以创建这个情节:

在此输入图像描述

但是,正如您所看到的,x轴并非都分配了标签.我怎样才能做到这一点?如果我们将x轴旋转45度也可以.但后来我不知道该怎么做:

这是我的代码(由thelatemail提供):

dat <- read.table("http://dpaste.com/1563769/plain/",header=TRUE)
layout(matrix(c(1,2,5,3,4,5),nrow=2,byrow = TRUE))
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("Method-XXX","Method-YYY"," Method-ZZZ","Method-XZZZ"," Method-XZZZY"),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)
Run Code Online (Sandbox Code Playgroud)

更新

我尝试了以下生成45度.但也没有工作:

sapply(3:6,
  function(x) {
    bp <- barplot(matrix(dat[,x],nrow=2,byrow=TRUE),xaxt="n",beside=TRUE,col=barcols)
    title(main=names(dat[x]))
    xaxislab <- c("Method-XXX","Method-YYY"," Method-ZZZ","Method-XZZZ"," Method-XZZZY")
    text(cex=1, x=colMeans(bp)-.25, y=-1.25, xaxislab, xpd=TRUE, srt=45)
    #axis(1,at=colMeans(bp),xaxislab,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.1,c("Precision","Recall"),fill=barcols,cex=1.5)
Run Code Online (Sandbox Code Playgroud)

Jos*_*ien 5

基本上与本答案中使用的策略相同(并在gridBase vignette(pdf)的第一个示例中演示),您可以使用grid.text()注释基本图形输出.

library(gridBase)

## Function that plots barplots with x-axes annotated with slanted
ff <- function(x) {
    barcols <- c("red","blue")

    ## Plot, suppressing the labels
    bp <- barplot(matrix(dat[,x], nrow = 2, byrow = TRUE), xaxt = "n",
                  beside = TRUE, col = barcols)
    title(main=names(dat[x]))
    xaxislab <- c("Method-XXX", "Method-YYY", " Method-ZZZ",
                  "Method-XZZZ", " Method-XZZZY")

    ## Compute x-axis coordinate at center of each group
    bp <- colMeans(bp) 

    ## Use gridBase to compute viewport coordinates and
    ## grid to push/pop viewports and add the labels
    vps <- baseViewports()
    pushViewport(vps$inner, vps$figure, vps$plot)
    grid.text(xaxislab,
        x = unit(bp, "native"), y = unit(-0.5, "lines"),
        just = "right", rot = 45, gp=gpar(cex=0.7))
    popViewport(3)
}

## Apply it to your data 
dat <- read.table("http://dpaste.com/1563769/plain/",header=TRUE)
layout(matrix(c(1,2,5,3,4,5),nrow=2,byrow = TRUE))
sapply(3:6, ff)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述