Gráfico de barras astackdas

Me gustaría crear un gráfico astackdo utilizando ggplot2 y geom_bar.

Aquí está mi fuente de datos:

Rank F1 F2 F3 1 500 250 50 2 400 100 30 3 300 155 100 4 200 90 10 

Quiero un gráfico astackdo donde x es el rango yy es los valores en F1, F2, F3.

 # Getting Source Data sample.data <- read.csv('sample.data.csv') # Plot Chart c <- ggplot(sample.data, aes(x = sample.data$Rank, y = sample.data$F1)) c + geom_bar(stat = "identity") 

Esto es todo lo lejos que puedo llegar. No estoy seguro de cómo puedo astackr el rest de los valores de campo.

Tal vez mi data.frame no está en buen formato?

Tu dijiste :

Tal vez mi data.frame no está en buen formato?

Sí, es cierto. Sus datos están en formato ancho. Debe colocarlos en el formato largo . En términos generales, el formato largo es mejor para la comparación de variables .

Usando reshape2 por ejemplo, puedes hacer esto usando melt :

 dat.m <- melt(dat,id.vars = "Rank") ## just melt(dat) should work 

Luego obtienes tu barra de barras:

 ggplot(dat.m, aes(x = Rank, y = value,fill=variable)) + geom_bar(stat='identity') 

Pero utilizando la notación de fórmula inteligente de lattice y barchart , no necesita reformar sus datos, simplemente haga esto:

 barchart(F1+F2+F3~Rank,data=dat) 

Necesita transformar sus datos a formato largo y no debe usar $ dentro de aes :

 DF <- read.table(text="Rank F1 F2 F3 1 500 250 50 2 400 100 30 3 300 155 100 4 200 90 10", header=TRUE) library(reshape2) DF1 <- melt(DF, id.var="Rank") library(ggplot2) ggplot(DF1, aes(x = Rank, y = value, fill = variable)) + geom_bar(stat = "identity") 

enter image description here

Deberá melt su dataframe para ingresarlo en el llamado formato largo:

 require(reshape2) sample.data.M <- melt(sample.data) 

Ahora sus valores de campo están representados por sus propias filas e identificados a través de la columna de variables. Esto ahora se puede aprovechar dentro de la estética ggplot:

 require(ggplot2) c <- ggplot(sample.data.M, aes(x = Rank, y = value, fill = variable)) c + geom_bar(stat = "identity") 

En lugar de astackr, también puede interesarle mostrar múltiples plots usando facetas:

 c <- ggplot(sample.data.M, aes(x = Rank, y = value)) c + facet_wrap(~ variable) + geom_bar(stat = "identity") 

Basándose en la respuesta de Roland, usando tidyr para remodelar los datos de ancho a largo:

 library(tidyr) library(ggplot2) df <- read.table(text="Rank F1 F2 F3 1 500 250 50 2 400 100 30 3 300 155 100 4 200 90 10", header=TRUE) df %>% gather(variable, value, F1:F3) %>% ggplot(aes(x = Rank, y = value, fill = variable)) + geom_bar(stat = "identity") 

enter image description here

    Intereting Posts