2010-05-02 9 views
6

L'axe des x est décomposé en intervalles de temps. Il y a une colonne intervalle dans la trame de données qui spécifie l'heure pour chaque ligne. La colonne est un facteur, où chaque intervalle est un niveau de facteur différent.Quelle est la méthode la plus simple pour remplir la zone sous une ligne geom_freqpoly?

Le tracé d'un histogramme ou d'une ligne en utilisant geom_histogram et geom_freqpoly fonctionne très bien, mais j'aimerais avoir une ligne, comme celle fournie par geom_freqpoly, avec la zone remplie.

Actuellement, je suis en utilisant geom_freqpoly comme ceci:

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

Je préférerais avoir une zone remplie, comme fourni par geom_density, mais sans lisser la ligne:

Le geom_area a été suggéré, y at-il un moyen de utiliser une statistique générée par ggplot2, telle que ..count .., pour les valeurs y de geom_area? Ou, l'agrégation de nombre doit-elle avoir lieu avant d'utiliser ggplot2?


Comme indiqué dans la réponse, geom_area (..., stat = "bin") est la solution:

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)) 

produit:

desired

+0

Si vous faites déjà des intervalles êtes-vous sûr que vous voulez une courbe lisse? – Dan

+0

Non, j'explorais juste les geoms ggplot2 qui produiraient la zone remplie.Je préférerais le geom_freqpoly, mais avec une zone remplie. Je suppose que geom_area l'obtiendra mais je devrai agréger manuellement le nombre de fréquences. – mattrepl

+0

En fait, y a-t-il une raison pour laquelle vous utilisez un facteur au lieu d'une variable de date et d'heure? – hadley

Répondre

9

Peut-être que vous voulez:

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

Merci, j'ai déjà utilisé 'stat = "bin"' mais je l'ai oublié. J'ai besoin d'acheter ton livre. =) – mattrepl

1

Je suis pas tout à fait sûr de ce que vous visez. Voulez-vous une ligne ou des barres. Vous devriez vérifier geom_bar pour les barres remplies. Quelque chose comme:

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

Si vous voulez une ligne remplie sous alors vous devriez regarder geom_area que je ne l'ai pas personnellement utilisé, mais il semble que la construction sera presque le même.

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

Espérons que cela aide. Donnez plus d'informations et nous pouvons probablement être plus utiles.

En fait, je jetterais sur un indice, juste la ligne des données et l'utiliser comme x, puis utilisez

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

et l'échelle fonctionne pour geom_area et geom_bar – Dan

1

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

Mais je ne pense pas que ce soit une image significative .

+0

Après l'avoir vu, je suis d'accord. Je vais mettre à jour ma question pour clarifier que je suis à la recherche d'un complot geom_freqpoly avec une zone remplie. Il semble que geom_area fonctionne, mais est-il possible d'utiliser les statistiques fournies par ggplot2 (par exemple, ..count ..) pour les valeurs de l'axe y? – mattrepl

3

Réponse complémentaire qui peut aider: geom_ribbon peut être utilisé pour produire une zone remplie entre deux lignes sans avoir besoin de construire explicitement un polygone. Il y a une bonne documentation ici: http://had.co.nz/ggplot2/geom_ribbon.html