Это расширение уже обсуждавшегося вопроса (я копирую идеальный пример данных и решение Якуба из https://stackoverflow.com/a/18162330 )
Данные:
raw <- read.csv("http://pastebin.com/raw.php?i=L8cEKcxS",sep=",")
raw[,2]<-factor(raw[,2],levels=c("Verygood","Bad","Good","VeryGood"),ordered=FALSE)
raw[,3]<-factor(raw[,3],levels=c("Very Bad","Bad","Good","Very Good"),ordered=FALSE)
raw[,4]<-factor(raw[,4],levels=c("Very Bad","Bad","Good","Very Good"),ordered=FALSE)
raw=raw[,c(2,3,4)]
freq=table(col(raw), as.matrix(raw)) # get the counts of each factor level
ggplot + панель группировки mutliple
Names=c("Food","Music","People") # create list of names
data=data.frame(cbind(freq),Names) # combine them into a data frame
data=data[,c(5,3,1,2,4)] # sort columns
# melt the data frame for plotting
data.m <- melt(data, id.vars='Names')
# plot everything
ggplot(data.m, aes(Names, value)) +
geom_bar(aes(fill = variable), position = "dodge", stat="identity")
Единственное дополнение, которое я изо всех сил пытаюсь сделать, - это добавить подогнанную линию (полином третьей степени), чтобы показать тенденцию для каждой категории в виде изменения переменной от «очень плохого» до «очень хорошего».
Построение тренда кажется проблемой.
ggplot(data.m, aes(variable, value)) + geom_bar(aes(fill = variable), position = "dodge", stat="identity")+facet_wrap(~Names)
. Затем вам просто нужно определить свою линию тренда - person Mako212   schedule 06.03.2018ggplot(data.m, aes(variable, value)) + geom_bar(aes(fill = variable), position = "dodge", stat="identity") + facet_grid(~Names) + geom_smooth(aes(group = 1))
. Не будет хорошо выглядеть с несколькими категориями. - person Axeman   schedule 06.03.2018