Alex Rivera | Logout

aggregate/sum with ggplot

Asked 2012-06-27T09:50:16.827
10

Is there a way to sum data with ggplot2 ?

I want to do a bubble map with the size depending of the sum of z.

Currently I'm doing something like

dd <- ddply(d, .(x,y), transform, z=sum(z))
qplot(x,y, data=dd, size=z)

But I feel I'm writing the same thing twice, I would like to be able to write something

qplot(x,y, data=dd, size=sum(z))

I had a look at stat_sum and stat_summmary but I'm not sure they are appropriate either.

Is it possible to it with ggplot2 ? If not, what would be best way to write those 2 lines.

Edit
Report

1 Answer

8

It can be done using stat_sum within ggplot2. By default, the dot size represents proportions. To get dot size to represent counts, use size = ..n.. as an aesthetic. Counts (and proportions) by a third variable can be obtained by weighting by the third variable (weight = cost) as an aesthetic. Some examples, but first, some data.

library(ggplot2)
set.seed = 321
# Generate somme data
df <- expand.grid(x = seq(1:5), y = seq(1:5), KEEP.OUT.ATTRS = FALSE)
df$Count = sample(1:25, 25, replace = F)
library(plyr)
new <- dlply(df, .(Count), function(data) matrix(rep(matrix(c(data$x, data$y), ncol = 2), data$Count), byrow = TRUE, ncol = 2))
df2 <- data.frame(do.call(rbind, new))
df2$cost <- 1:325

The data contains units categorised according to two factors: X1 and X2; and a third variable which is the cost of each unit.

Plot 1: Plots the proportion of elements at each X1 - X2 combination. group=1 tells ggplot to calculate proportions out of the total number of units in the data frame.

ggplot(df2, aes(factor(X1), factor(X2))) + 
  stat_sum(aes(group = 1))

enter image description here

Plot 2: Plots the number of elements at each X1 - X2 combination.

ggplot(df2, aes(factor(X1), factor(X2))) + 
  stat_sum(aes(size = ..n..))

enter image description here

Plot 3: Plots the cost of the elements at each X1 - X2 combination, that is weight by the third variable.

ggplot(df2, aes(x=factor(X1), y=factor(X2))) + 
     stat_sum(aes(group = 1, weight = cost, size = ..n..)) 

enter image description here

Plot 4: Plots the proportion of the total cost of all elements i

answered 2012-06-28T03:08:09.827

Your Answer