按ggplot2中的因子级别分组(

)我有一个包含四个三级分类变量的数据框:before_weight,after_weight,before_pain和after_pain。按ggplot2中的因子级别分组(

我想制作一个条形图,显示每个变量级别的比例。我目前的代码达到了。

问题是数据的表示。我希望将酒吧之前和之后的各个酒吧分组在一起,以便代表before_weight变量中回答1的人员的酒吧在代表after_weight变量中回答1的人员的酒吧旁边进行分组,以此类推体重和疼痛变量。

我一直试图使用dplyr,mutate()与众多的ifelse()语句,使一个新变量配对有问题的组,但似乎无法让它工作。

任何帮助将不胜感激。

起点(DF):

df <- data.frame(before_weight=c(1,2,3,2,1),before_pain=c(2,2,1,3,1),after_weight=c(1,3,3,2,3),after_pain=c(1,1,2,3,1)) 

当前代码:

library(tidyr) 

dflong <- gather(df, varname, score, before_weight:after_pain, factor_key=TRUE)

df$score<- as.factor(df$score)

library(ggplot2)

library(dplyr)

dflong %>%

group_by(varname) %>%

count(score) %>%

mutate(prop = 100*(n/sum(n))) %>%

ggplot(aes(x = varname, y = prop, fill = factor(score))) + scale_fill_brewer() + geom_col(position = 'dodge', colour = 'black')

UPDATE:

我想比例,而不是数,所以我已经尝试调整Nate的代码。由于我使用问题变量来分组数据以得到比例,我似乎无法使用gsub()来更改该变量的内容。相反,我添加了question2并将其传递到facet_wrap()。它似乎工作。:

df %>% gather("question", "val") %>% 

count(question, val) %>%

group_by(question) %>%

mutate(percent = 100*(n/sum(n))) %>%

mutate(time= factor(ifelse(grepl("before", question), "before", "after"), c("before", "after"))) %>%

mutate(question2= ifelse(grepl("weight", question), "weight", "pain")) %>%

ggplot(aes(x=val, y=percent, fill = time)) + geom_col(position = "dodge") + facet_wrap(~question2)

回答:

这段代码是否使你在之后的视觉比较?其中一个ifelse和一个gsub将帮助制作我们可用于分解和填充ggplot的变量。

df %>% gather("question", "val") %>% # go long 

mutate(time = factor(ifelse(grepl("before", question), "before", "after"),

c("before", "after")), # use factor with levels to control order

question = gsub(".*_", "", question)) %>% # clean for facets

ggplot(aes(x = val, fill = time)) + # use fill not color for whole bar

geom_bar(position = "dodge") + # stacking is the default option

facet_wrap(~question) # two panels

以上是 按ggplot2中的因子级别分组( 的全部内容, 来源链接: utcz.com/qa/257205.html

回到顶部