首页 文章

ggplot:百分比计算规模上因子组的折线图

提问于
浏览
1

假设我想在ggplot中的不同年龄组中绘制问题的“是”答案的百分比 . 这些年龄组显然是因素,但我希望它们以类似比例的方式显示,所以想要使用折线图 .

这是一些数据:

mydata <- data.frame(
    age_group = c("young", "middle", "old"),
    question = sample(c("yes", "no"), 99, replace = TRUE))
mydata$age_group = factor(mydata$age_group,levels(mydata$age_group)[c(3, 1, 2)])  
mydata$question = factor(mydata$question,levels(mydata$question)[c(2,1)])

到目前为止,我一直在使用此代码生成堆叠条形图:

ggplot(mydata, aes(age_group, fill = question)) +  geom_bar(position = "fill")

如何才能将此更改为折线图,只需要"yes"答案的频率计数?答案中的标记表明产生正确输出的解决方法:
enter image description here

但我希望有一种方法可以在一行代码中自动执行此操作,而不是先创建此摘要表 .

2 回答

  • 1

    如果您只想为每个类别设置“是”的百分比,我建议您将数据更改为以下内容:

    question age_group value   percent
    1      yes     young    14 0.4242424
    3      yes    middle    17 0.5151515
    5      yes       old    20 0.6060606
    

    使用此代码汇总数据:

    library(reshape)
    mydata.summary = melt(xtabs(~question+age_group,data=mydata))
    mydata.summary2 = mydata.summary[mydata.summary$question=="yes",]
    mydata.summary2$percent <- mydata.summary2$value/melt(xtabs(~age_group,data=mydata))$value
    ggplot(mydata.summary2, aes(age_group,percent, group = question, colour=question)) + geom_line()
    
  • 5

    如果我理解正确,这可以做你想要的:

    ggplot(mydata) + 
      stat_bin(aes(x=age_group, color=question, group=question), geom="line")
    

    enter image description here

    请注意,由于您没有为随机数设置种子,因此与“是/否”看起来并不完全相同 .

相关问题