首页 文章

使用基本图形将文本(而不是值)添加到R中的堆叠水平条形图

提问于
浏览
1

我正在尝试使用R中的堆叠条形图创建一个显示带有一个分组因子和一个识别因子的分数的信息图 . 我想在条形图的相关部分顶部写入ID . 我遇到的所有答案都讨论了如何将条形图的值添加为标签,而不是行名称 .

这就是我现在所拥有的:

id <- letters[seq(1,4)]
    groups <- LETTERS[seq(1,8)]
    scores <- matrix((c(0,0,7,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,8,0,2)),ncol=8)
   row.names(scores) <- id
   par(mfrow=c(1, 1), mar=c(2, 5, 2, 2))
   bb <- barplot(scores, horiz = T, las = 2, cex.names = 0.5,xaxt="n", cex.axis=0.5,cex.lab=0.5, legend=F,main="Weekly Scores", space=0, border=NA)

我想要像这样的东西Adding values to barplot of table in R但水平而不是垂直条,以及ID文本(a,b,c等)代替值 . 如果可能的话,我宁愿不使用ggplot或任何其他软件包(由于管理员权限,使用软件包限制了工作中代码的用户友好性) .

为了使事情变得更复杂,我的ID值(并且为了图形的目的必须保持这样)句子长度....我正在使用我在网上找到的函数包装它们:

# Write function to wrap labels
wrap.it <- function(x, len)
{ 
sapply(x, function(y) paste(strwrap(y, len), 
                          collapse = "\n"), 
     USE.NAMES = FALSE)
 }

# Call this function with a list or vector
 wrap.labels <- function(x, len)
 {
 if (is.list(x))
   {
  lapply(x, wrap.it, len)
   } else {
  wrap.it(x, len)
   }
 }

所以我想把包装好的文字“装”到栏中 . 任何帮助赞赏!

1 回答

  • 0

    您可以为文本添加值 . 根据需要进行修改 .

    id <- letters[seq(1,4)]
    groups <- LETTERS[seq(1,8)]
    scores <- matrix((c(2,0,7,0,1,2,0,1,0,1,2,0,0,2,0,0,0,0,8,0,0,0,3,1,0,0,2,0,0,8,0,2)),ncol=8)
    row.names(scores) <- id
    
    acsc=apply(scores,2,cumsum)
    par(mfrow=c(1, 1), mar=c(2, 5, 2, 2))
    bb <- barplot(scores, horiz = T, las = 2, cex.names = 0.5,xaxt="n",col=c("grey60","grey70","grey80","grey90"),
        cex.axis=0.5,cex.lab=0.5, legend=F,main="Weekly Scores", space=0, border=NA)
    sapply(1:4,function(z)
    text(acsc[z,]-.3,bb,labels=sapply(scores[z,],function(zr)ifelse(zr==0,"",paste(rownames(scores)[z],zr,sep="="))),cex=.8))
    axis(2,at=bb,groups)
    

    enter image description here

相关问题