2011-03-07 7 views
5

Pour l'ensemble de données suivantes,statistiques sommaires Traçage

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

Je veux construire un graphique linéaire de ggplot2, où l'axe des x est Genre et l'axe y est la somme de tous les montants (sous réserve de la Genre).

J'ai essayé ce qui suit:

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

mais en vain.

Répondre

8

Si vous ne voulez pas calculer une nouvelle trame de données avant le traçage, vous utilisez CVAN stat_summary dans ggplot2. Par exemple, si votre jeu de données ressemble à ceci:

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 

Vous pouvez utiliser qplot avec un argument stat="summary":

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

Ou ajouter un stat_summary à une base ggplot graphique:

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

Neat one-liner ... bien que vous puissiez facilement ommit 'factor', puisque' stringsAsFactors 'est le comportement par défaut. – aL3xa

+0

Je pense que je vais laisser l'instruction factor() parce qu'elle est utilisée dans la question, mais vous avez raison, ce n'est pas utile ici. Merci de l'avoir signalé. – juba

+0

Merci beaucoup, la raison pour laquelle j'utilisais factor était parce que j'essayais d'obtenir la somme de plus en plus bas, mais ça ne le fait pas. –

1

Essayez quelque chose comme ceci:

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

Avez-vous généré automatiquement votre instruction structure() à partir de l'exemple fourni dans la question? Si oui, je serais très heureux de savoir comment :-) – juba

+0

Non, je l'ai entré à la main, donc appliqué 'dput' sur celui-ci. – aL3xa

+0

Mais vous pouvez utiliser la fonction 'read.clipboard' du paquet' psych'. Cela fonctionne comme un charme: 'dtf <- read.clipboard()'. Merci de me l'avoir rappelé. – aL3xa