这始于评论,但不变成答案似乎是不公平的。要正确回答您的问题(即使在 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))
产生以下内容:
另一种方法是将所有男性文本标签的 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)
这使
情节中的冗余混乱更少,数据与墨水的比例更高,等等。但是最后你需要制作对你的观众有意义的情节。