R ggplot:比例上因子组的百分比计数折线图

R ggplot:比例上因子组的百分比计数折线图,r,ggplot2,R,Ggplot2,假设我想在ggplot中绘制一个问题的“是”答案在不同年龄组中的百分比。这些年龄组显然是一些因素,但我希望它们以类似于比例的方式显示出来,所以我想使用折线图 以下是一些数据: mydata <- data.frame( age_group = c("young", "middle", "old"), question = sample(c("yes", "no"), 99, replace = TRUE)) mydata$age_group = factor(mydata$

假设我想在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) + 
  stat_bin(aes(x=age_group, color=question, group=question), geom="line") 


注意:在是/否方面,这看起来与您的不完全相同,因为您没有为随机数设置种子。

如果我理解正确,这就是您想要的:

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


注意:在是/否方面,这看起来与您的不完全相同,因为您没有为随机数设置种子。

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

  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()
库(重塑)
mydata.summary=melt(xtabs(~question+age_group,data=mydata))
mydata.summary2=mydata.summary[mydata.summary$question==“yes”,]

mydata.Summary 2$percent如果您只想知道每个类别“是”的百分比,我建议您将数据更改为以下内容:

  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()
库(重塑)
mydata.summary=melt(xtabs(~question+age_group,data=mydata))
mydata.summary2=mydata.summary[mydata.summary$question==“yes”,]

mydata.Summary百分之二我不明白。你只需要一个线条图,它基本上可以连接粉色条的顶部?我不明白。你只需要一个连接粉色条顶部的线图?差不多,但我想要的是百分比,而不是绝对计数。@Danielle,你可以将
geom=area
color=question
更改为
fill=question
,添加
position=fill
,这将起作用,但将是面积图而不是折线图。不幸的是,我不知道如何堆叠和填充线条。差不多,但我想要的是百分比,而不是绝对计数。@Danielle,你可以将
geom=area
color=question
更改为
fill=question
,添加
position=fill
,这将是一个面积图,而不是一个折线图。不幸的是,我不知道如何堆叠和填充行。如果您添加
)+geom_line()
,我想这会切断您的答案。不管怎样,我一直是这样做的,作为一种解决办法,但这有点痛苦。我只是想知道是否有一种更有效的方法。如果你添加
)+geom_line()
,我想你的答案会被切断。不管怎样,我一直是这样做的,作为一种解决办法,但这有点痛苦。我只是想知道是否有更有效的方法。