我是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)
请帮助在每个栏中分配正确的值 感谢
答案 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))
产生以下内容:
另一种方法是将所有男性文本标签的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)
给出了
绘图中的冗余杂乱程度较少,数据与墨水比率较高等。但最终您需要制作适合您的观众的情节。