如何使用R-base在堆积条形图中标记百分比值

时间:2013-02-18 07:08:21

标签: r

我是R.的新手。我希望其他人向我解释如何使用基本的R绘图功能(R base)以一致的方式在单个堆叠条中添加绝对值。我尝试使用R base绘制堆积条形图,但是这些值以不一致/不合逻辑的方式出现,使得每个村庄的值应该是100%,但它们总和不是100%。 以下是正在处理的数据:

Village      100         200       300  400      500

Male    68.33333    53.33333        70   70 61.66667

Female  31.66667    46.66667        30   30 38.33333

总之,有五个村庄和数据显示按性别接受采访的户主。

我使用以下命令绘制图表:

barplot(mydata,col=c("yellow","green")
x<-barplot(mydata,col=c("yellow","green")
text(x,mydata,labels=mydata,pos=3,offset=.5)

请帮助在每个栏中分配正确的值 感谢

1 个答案:

答案 0 :(得分:13)

这开始是一个评论,但似乎不公平,不能回答。要正确回答您的问题(即使在Stack Overflow上),我们需要知道“mydata”的结构。我首先假设它是一个包含5行和2或3列的数据框,但在这种情况下,您的代码没有任何意义。但是,如果这个 如何构建它是一种方法来做我想你想要的:

mydata <- data.frame(
    row.names =c(100, 200, 300, 400, 500),
    Male =c(68.33333, 53.33333, 70, 70, 61.66667),
    Female =c(31.66667, 46.66667, 30, 30, 38.33333))

x <- barplot(t(as.matrix(mydata)), col=c("yellow", "green"), 
    legend=TRUE, border=NA, xlim=c(0,8), args.legend=
        list(bty="n", border=NA), 
    ylab="Cumulative percentage", xlab="Village number")
text(x, mydata$Male-10, labels=round(mydata$Male), col="black")
text(x, mydata$Male+10, labels=100-round(mydata$Male))

产生以下内容:

enter image description here

另一种方法是将所有男性文本标签的y值设置为40,将所有女性设置为80 - 这样可以减少标签抖动的混乱,并且文本垂直位置的缺点是不再是理论上依附于数据。

就个人而言,我根本不喜欢这个条形图,尽管有很多更糟糕的数据可视化犯罪而不是简单的条形图。图上的数字混乱并且减损了数据实际映射到颜色,形状和大小的视觉影响。我宁愿像一个简单的点图:

library(ggplot2)
ggplot(mydata, aes(x=row.names(mydata), y=Male)) +
  geom_point(size=4) +
  coord_flip() +
  labs(x="Village number\n", y="Percentage male") +
  ylim(0,100) +
  geom_hline(yintercept=50, linetype=2)

给出了

enter image description here

绘图中的冗余杂乱程度较少,数据与墨水比率较高等。但最终您需要制作适合您的观众的情节。