2011-03-07 19 views
5

Para el siguiente conjunto de datos,Trazado de las estadísticas de resumen

Genre Amount 
Comedy 10 
Drama 30 
Comedy 20 
Action 20 
Comedy 20 
Drama 20 

Quiero construir un gráfico de líneas ggplot2, donde el eje x es Genre y el eje y es la suma de todas las cantidades (condicionada a la Genre).

he intentado lo siguiente:

p = ggplot(test, aes(factor(Genre), Gross)) + geom_point() 
p = ggplot(test, aes(factor(Genre), Gross)) + geom_line() 
p = ggplot(test, aes(factor(Genre), sum(Gross))) + geom_line() 

pero fue en vano.

Respuesta

8

Si no desea calcular una nueva trama de datos antes de trazar, se utiliza CVAN stat_summary en ggplot2. Por ejemplo, si el conjunto de datos es el siguiente:

R> df <- data.frame(Genre=c("Comedy","Drama","Action","Comedy","Drama"), 
R+     Amount=c(10,30,40,10,20)) 
R> df 
    Genre Amount 
1 Comedy  10 
2 Drama  30 
3 Action  40 
4 Comedy  10 
5 Drama  20 

puede utilizar cualquiera qplot con un argumento stat="summary":

R> qplot(Genre, Amount, data=df, stat="summary", fun.y="sum") 

O añadir un stat_summary a una base ggplot gráfico:

R> ggplot(df, aes(x=Genre, y=Amount)) + stat_summary(fun.y="sum", geom="point") 
+0

Neat one-liner ... aunque puedes omitir fácilmente 'factor', ya que' stringsAsFactors 'es el comportamiento predeterminado. – aL3xa

+0

Creo que dejaré que la instrucción factor() se use en la pregunta, pero tienes razón, no es útil aquí. Gracias por señalarlo. – juba

+0

Muchas gracias, la razón por la que estaba usando Factor fue porque estaba tratando de obtener la suma de menor a mayor, pero eso no es suficiente. –

1

intentar algo como esto:

dtf <- structure(list(Genre = structure(c(2L, 3L, 2L, 1L, 2L, 3L), .Label = c("Action", 
"Comedy", "Drama"), class = "factor"), Amount = c(10, 30, 20, 
20, 20, 20)), .Names = c("Genre", "Amount"), row.names = c(NA, 
-6L), class = "data.frame") 

library(reshape) 
library(ggplot2) 
mdtf <- melt(dtf) 
cdtf <- cast(mdtf, Genre ~ . , sum) 
ggplot(cdtf, aes(Genre, `(all)`)) + geom_bar() 
+0

¿Ha generado automáticamente su instrucción structure() del ejemplo proporcionado en la pregunta? En caso afirmativo, estaría encantado de saber cómo :-) – juba

+0

No, lo ingresé a mano, de ahí que aplique 'dput' en él. – aL3xa

+0

Pero puede usar la función 'read.clipboard' del paquete' psych'. Funciona como un encanto: 'dtf <- read.clipboard()'. Gracias por recordarme sobre eso. – aL3xa

Cuestiones relacionadas