superponer - Gráfico de barras agrupadas en ggplot
superponer graficas en r ggplot (1)
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 marco de datos, 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?
Para aclarar un poco, en ggplot barra de agrupación múltiple tenía un marco de datos 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))
.
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 objetivo es crear este tipo de trama con ggplot2
.
- No me importan los colores, el diseño, etc.
- La trama no corresponde a los datos falsos
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 ...