首页 文章

切割y轴的分组barplot

提问于
浏览
4

我试图用分组的条形图和切割的y轴制作一个图 . 但是我似乎无法兼得 . 使用此数据:

d = t(matrix( c(7,3,2,3,2,2,852,268,128,150,
              127,74,5140,1681,860,963,866,
              470,26419,8795,4521,5375,4514,2487),
            nrow=6, ncol=4 ))
colnames(d)=c("A", "B", "C", "D", "E", "F")

我可以得到分组的条形图,如:

barplot( d, beside = TRUE)

Example

然后我可以使用以下方法获得切割的y轴:

# install.packages('plotrix', dependencies = TRUE)
require(plotrix)
gap.barplot( as.matrix(d), 
             beside = TRUE, 
             gap=c(9600,23400), 
             ytics=c(0,3000,6000,9000,24000,25200,26400) )

enter image description here

然而,然后我放松了分组和A,B,C ......标签 . 我怎样才能得到这两个?

2 回答

  • 3

    你可以手动完成 . 与 barplot 类似, ?gap.barplot 返回条形的中心位置 . 使用这些来添加标签 .

    使用 space 作为常规 barplot 之间的组之间的间距似乎不起作用 . 我们可以使用一排NA来破解空间 .

    d = t(matrix( c(7,3,2,3,2,2,852,268,128,150,
                                    127,74,5140,1681,860,963,866,
                                    470,26419,8795,4521,5375,4514,2487),
                                nrow=6, ncol=4 ))
    colnames(d)=c("A", "B", "C", "D", "E", "F")
    
    # add row of NAs for spacing
    d=rbind(NA,d)
    
    # install.packages('plotrix', dependencies = TRUE)
    require(plotrix)
    
    # create barplot and store returned value in 'a'
    a = gap.barplot(as.matrix(d), 
                    gap=c(9600,23400), 
                    ytics=c(0,3000,6000,9000,24000,25200,26400),
                    xaxt='n') # disable the default x-axis
    
    # calculate mean x-position for each group, omitting the first row 
    # first row (NAs) is only there for spacing between groups
    aa = matrix(a, nrow=nrow(d))
    xticks = colMeans(aa[2:nrow(d),])
    
    # add axis labels at mean position
    axis(1, at=xticks, lab=LETTERS[1:6])
    
  • 5

    在koekenbakker的答案的帮助下,我终于想出了这个:

    # install.packages('plotrix', dependencies = TRUE)
    require(plotrix)
    
    d = t(matrix( c(7,3,2,3,2,2,852,268,128,150,
                    127,74,5140,1681,860,963,866,
                    470,26419,8795,4521,5375,4514,2487),
                  nrow=6, ncol=4 ))
    
    # Hack for grouping (leaves the extra space at the end)
    e = as.vector(rbind(d, rep(NA, 6)))[1:29]
    
    a = gap.barplot(ceiling(as.matrix(e/60)), 
                    gap=c(160,390),
                    col=rep(c(grey.colors(4), 1), 6),
                    #space=rep(c(rep(0,3), 1), 6),
                    ytics=c(0,50,100,150,400,420,440),
                    xaxt='n') # disable the default x-axis
    
    xticks=c(2.5, 7.5, 12.5, 17.5, 22.5, 27.5)
    
    # add axis labels at mean position
    axis(1, at=xticks, LETTERS[1:6] )
    
    legend("topright", LETTERS[7:10],
           bty="n",  
           fill=grey.colors(4))
    

    enter image description here

相关问题