modificar - Gráfico de barras apiladas
plot en r (4)
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")
Me gustaría crear un gráfico apilado 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 apilado 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 apilar el resto de los valores de campo.
Tal vez mi data.frame no está en buen formato?
Deberá melt
su marco de datos 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 apilar, también puede interesarle mostrar múltiples parcelas usando facetas:
c <- ggplot(sample.data.M, aes(x = Rank, y = value))
c + facet_wrap(~ variable) + geom_bar(stat = "identity")
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")
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)