循环中text()的行为不一致

时间:2014-07-29 21:37:28

标签: r

我想循环遍历data.frame,将值从最小值组织到最大值,然后创建显示值的条形图。为了有用,我当然需要标记条形。调整this SO answer中的方法,并循环变量,我几乎得到了我想要的东西:

for(nm in names(mtcars)){
  ord <- order(mtcars[nm])
  end_point = 0.5 + nrow(mtcars) + nrow(mtcars)-1   
  barplot(mtcars[ord, nm], main=paste(nm, " vs. model", sep=""), ylab=nm, xlab=1, space=1)
  text(seq(1.5,end_point,by=2), par("usr")[3]-0.25, 
       srt = 60, adj= 1, xpd = TRUE,
       labels = paste(rownames(mtcars)[ord]), cex=0.65)
}

运行代码后,我发现x轴和标签文本之间的空间在图之间变化很大,“am”和“vs”的图是最严重的违规者。为什么会发生这种情况,如何确保标签处于一致的位置?

1 个答案:

答案 0 :(得分:1)

那是因为由于范围不同,用户空间的比例随着每个情节而变化。所以.25的不同意味着不同规模的不同。因此,不应使用原始.25值,而应将其缩放到用户空间。 <怎么样

for(nm in names(mtcars)){
  ord <- order(mtcars[nm])
  end_point = 0.5 + nrow(mtcars) + nrow(mtcars)-1   
  bp<-barplot(mtcars[ord, nm], main=paste(nm, " vs. model", sep=""), ylab=nm, xlab=1, space=1)
  text(seq(1.5,end_point,by=2), par("usr")[3]+grconvertY(1, from="inches", to="user"), 
       srt = 60, adj= 1, xpd = TRUE,
       labels = paste(rownames(mtcars)[ord]), cex=0.65)
}