ggplot分组的酒吧情节

我有一个调查文件,其中行是观察和列问题。

以下是一些假冒的数据 :

People,Food,Music,People P1,Very Bad,Bad,Good P2,Good,Good,Very Bad P3,Good,Bad,Good P4,Good,Very Bad,Very Good P5,Bad,Good,Very Good P6,Bad,Good,Very Good 

我的目标是用ggplot2创build这种情节。

  • 我绝对不在乎颜​​色,devise等
  • 情节不符合假数据

在这里输入图像说明

这里是我的假数据:

 raw <- read.csv("http://pastebin.com/raw.php?i=L8cEKcxS",sep=",") raw[,2]<-factor(raw[,2],levels=c("Very Bad","Bad","Good","Very Good"),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) 

但是,如果我selectY作为计数,那么我正面临一个关于selectX和组值的问题…我不知道如果我不能使用reshape2 ,我是否能成功…我也厌倦了使用重塑function。 但我不明白如何使用它…

首先,你需要得到每个类别的计数,即每个组(Food,Music,People)有多lessBads和Goods等等。 这可以这样做:

 raw <- read.csv("http://pastebin.com/raw.php?i=L8cEKcxS",sep=",") raw[,2]<-factor(raw[,2],levels=c("Very Bad","Bad","Good","Very Good"),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)] # getting rid of the "people" variable as I see no use for it freq=table(col(raw), as.matrix(raw)) # get the counts of each factor level 

然后你需要创build一个数据框,融化并绘制它:

 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多个分组栏中,您有一个如下所示的数据框:

 > head(df) ID Type Annee X1PCE X2PCE X3PCE X4PCE X5PCE X6PCE 1 1 A 1980 450 338 154 36 13 9 2 2 A 2000 288 407 212 54 16 23 3 3 A 2020 196 434 246 68 19 36 4 4 B 1980 111 326 441 90 21 11 5 5 B 2000 63 298 443 133 42 21 6 6 B 2020 36 257 462 162 55 30 

由于在第4-9列中有数字值,稍后将在y轴上进行绘图,所以可以很容易地通过reshape和绘制进行转换。

对于我们当前的数据集,我们需要类似的东西,所以我们使用freq=table(col(raw), as.matrix(raw))来得到这个结果:

 > data Names Very.Bad Bad Good Very.Good 1 Food 7 6 5 2 2 Music 5 5 7 3 3 People 6 3 7 4 

想象一下你有Very.Bad BadBadGood等等,而不是X1PCEX2PCEX3PCE 。 看到相似性? 但是我们需要先创build这样的结构。 因此freq=table(col(raw), as.matrix(raw))