4

我是 R 新手。我希望其他人向我解释如何使用基本的 R 绘图功能(R 基)以一致的方式在各个堆叠条内添加绝对值。我尝试使用 R 基础绘制堆积条形图,但这些值以不一致/不合逻辑的方式出现,以至于每个村庄的值都应该是 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

综上所述,共有 5 个村,数据显示了按性别访问的户主。

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

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

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

4

1 回答 1

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)

这使

在此处输入图像描述

情节中的冗余混乱更少,数据与墨水的比例更高,等等。但是最后你需要制作对你的观众有意义的情节。

于 2013-02-18T08:39:28.853 回答