Gráfico de barras agrupadas en ggplot

Tengo un archivo de encuesta en el que están la observación y la pregunta de la columna.

Aquí hay algunos datos falsos que parecen:

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 

Mi objective es crear este tipo de ttwig con ggplot2 .

  • No me importan los colores, el diseño, etc.
  • La ttwig no corresponde a los datos falsos

enter image description here

Aquí están mis datos falsos:

 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) 

Pero si elijo Y como conteo, entonces me enfrento a un problema para elegir los valores X y Group … No sé si puedo tener éxito sin usar reshape2 … También me cansé de usar remodelar con derretir función. Pero no entiendo cómo usarlo …

Primero necesita obtener los conteos de cada categoría, es decir, cuántos Bads and Goods y demás hay para cada grupo (Food, Music, People). Esto se haría así:

 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 

Luego necesita crear un dataframe, fundirlo y trazarlo:

 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") 

¿Es esto lo que buscas?

enter image description here

Para aclarar un poco, en ggplot barra de agrupación múltiple tenía un dataframe que se veía así:

 > 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 

Como tiene valores numéricos en las columnas 4-9, que luego se trazarán en el eje y, esto se puede transformar fácilmente con la reshape y el trazado.

Para nuestro conjunto de datos actual, necesitábamos algo similar, así que usamos freq=table(col(raw), as.matrix(raw)) para obtener esto:

 > 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 

Imagínese que tiene Very.Bad , Bad , Good , etc. en lugar de X1PCE , X2PCE , X3PCE . Ver la similitud? Pero necesitábamos crear esa estructura primero. Por lo tanto, la freq=table(col(raw), as.matrix(raw)) .

    Intereting Posts