2010-05-02 19 views
6

El eje x es el tiempo dividido en intervalos de tiempo. Hay una columna de intervalo en el marco de datos que especifica la hora de cada fila. La columna es un factor, donde cada intervalo es un nivel de factor diferente.¿Cuál es el método más simple para llenar el área bajo una línea geom_freqpoly?

Trazar un histograma o línea usando geom_histogram y geom_freqpoly funciona muy bien, pero me gustaría tener una línea, como la proporcionada por geom_freqpoly, con el área llena.

Actualmente estoy usando geom_freqpoly así:

ggplot(quake.data, aes(interval, fill=tweet.type)) + geom_freqpoly(aes(group = tweet.type, colour = tweet.type)) + opts(axis.text.x=theme_text(angle=-60, hjust=0, size = 6)) 

plots

yo preferiría tener un área llena, como proporcionada por geom_density, pero sin suavizar la línea:

smoooth

Se ha sugerido geom_area, ¿hay alguna forma de use una estadística generada por ggplot2, como ... cuenta .., para los valores y de geom_area? O bien, ¿la agregación de conteo debe ocurrir antes de usar ggplot2?


Como se indica en la respuesta, geom_area (..., stat = "bin") es la solución:

ggplot(quake.data, aes(interval)) + geom_area(aes(y = ..count.., fill = tweet.type, group = tweet.type), stat = "bin") + opts(axis.text.x=theme_text(angle=-60, hjust=0, size = 6)) 

produce:

desired

+0

si ya está haciendo los intervalos ¿está seguro de que quiere una curva suave? – Dan

+0

No, solo estaba explorando los geoms ggplot2 que producirían el área llena.Preferiría el geom_freqpoly, pero con un área llena. Supongo que geom_area lo obtendrá, pero tendré que agregar manualmente el recuento de frecuencias. – mattrepl

+0

En realidad, ¿hay alguna razón por la que está utilizando un factor en lugar de una variable de fecha y hora? – hadley

Respuesta

9

Tal vez usted quiere:

geom_area(aes(y = ..count..), stat = "bin") 
+4

Gracias, he usado 'stat =' bin '' antes, pero se me olvidó. Necesito comprar tu libro. =) – mattrepl

1

estoy no del todo seguro de lo que estás buscando. ¿Quieres una línea o barras? Debería consultar geom_bar para barras rellenas. Algo así como:

p <- ggplot(data, aes(x = time, y = count)) 
p + geom_bar(stat = "identity") 

Si desea una línea rellena debajo entonces usted debe buscar en geom_area que no he utilizado personalmente pero parece que el constructo será casi el mismo.

p <- ggplot(data, aes(x = time, y = count)) 
p + geom_area() 

Espero que ayude. Proporcione más información y probablemente podamos ser más útiles.

En realidad me gustaría lanzar en un índice, sólo la fila de los datos y usar eso como x, y luego usar

p <- ggplot(data, aes(x = index, y = count)) 
p + geom_bar(stat = "identity") + scale_x_continuous("Intervals", 
breaks = index, labels = intervals) 
+0

y la escala funciona para geom_area y geom_bar – Dan

1

ggplot(quake.data, aes(interval, fill=tweet.type, group = 1)) + geom_density()

Pero no creo que esto es un gráfico significativo .

+0

Después de verlo, estoy de acuerdo. Actualizaré mi pregunta para aclarar que estoy buscando un diagrama geom_freqpoly con un área completa. Parece que geom_area funcionaría, pero ¿es posible usar las estadísticas proporcionadas por ggplot2 (por ejemplo, ..count ..) para los valores del eje y? – mattrepl

3

respuesta complementaria que pueda ayudar: geom_ribbon se puede utilizar para producir un área rellena entre dos líneas sin necesidad de construir un polígono de forma explícita. Hay una buena documentación aquí: http://had.co.nz/ggplot2/geom_ribbon.html

Cuestiones relacionadas