Barplot-添加百分比

时间:2015-08-12 09:34:53

标签: r bar-chart

所以我有这个反映百分比

的数字变量
data1.pct<-19
data2.pct<-5
data3.pct<-76

class1.pct<-35
class2.pct<-18
class3.pct<-47

现在我正在使用此代码生成条形图

CairoPDF(paste('data1/', data, '_plot1.pdf', sep=''), family='sans', pointsize=9, width=6, height=3.25)
par(mar=(c(4, 4, 1, 13) + 0.1), mgp=c(3, 2, 0), xpd=TRUE)
barplot(cbind(
  c(data1.pct, data2.pct, data3.pct),
  c(class1.pct, class2.pct, class3.pct)), col=c("firebrick3", "dodgerblue3", "mistyrose1"), ylim=c(0,100), space=c(0,1)
)
legend("topright", inset=c(-0.55, 0), legend=c("not attend", "refused", "attend"), col=c("mistyrose1", "dodgerblue3", "firebrick3"), lty=1, lwd=2, bty='n')
dev.off()

结果是 enter image description here

我想在barplot中添加相应的百分比,即我的变量中的数字/百分比。所以我的输出应该是enter image description here

我想使用barplot功能来执行此操作和 ggplot2

我尝试使用

添加百分比
text(mydata, 0, round(data1.pct), 1),cex=1,pos=3) but this is not right.

1 个答案:

答案 0 :(得分:2)

要获取文字的y值,您可以使用cumsum以及tailhead来获取每个条形区域的中点。

par(mar=(c(4, 4, 1, 13) + 0.1), mgp=c(3, 2, 0), xpd=TRUE)

## Make the matrix for barplot
mat <- cbind(c(data1.pct, data2.pct, data3.pct), c(class1.pct, class2.pct, class3.pct))

## Get the y-values for text
ys <- apply(mat, 2, function(x) c(x[1]/2, head(cumsum(x),-1) + tail(x,-1)/2))

## Make barplot, store x data
xs <- barplot(mat, col=c("firebrick3", "dodgerblue3", "mistyrose1"), ylim=c(0,100), space=c(0,1))

## Add text
text(rep(xs, each=nrow(ys)), c(ys), labels=c(mat))

legend("topright", inset=c(-0.55, 0), legend=c("not attend", "refused", "attend"), col=c("mistyrose1", "dodgerblue3", "firebrick3"), lty=1, lwd=2, bty='n')

enter image description here