10

有没有办法对数据求和ggplot2

我想做一个气泡图,其大小取决于 z 的总和。

目前我正在做类似的事情

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

但是我觉得我在写两次相同的东西,我希望能够写一些东西

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

我看了看,stat_sumstat_summmary我也不确定它们是否合适。

有可能ggplot2吗?如果不是,那么编写这两行的最佳方法是什么。

4

2 回答 2

8

它可以stat_sum在 ggplot2 中使用。默认情况下,点大小表示比例。要获得点大小来表示计数,请size = ..n..用作美学。第三个变量的计数(和比例)可以通过第三个变量的权重(weight = cost)作为美学来获得。一些例子,但首先是一些数据。

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

数据包含根据两个因素分类的单位:X1 和 X2;第三个变量是每个单位的成本。

绘图 1:绘制每个 X1 - X2 组合的元素比例group=1告诉 ggplot 从数据框中的单位总数中计算比例。

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

在此处输入图像描述

绘图 2:绘制每个 X1 - X2 组合的元素

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

在此处输入图像描述

图 3:绘制每个 X1 - X2 组合的元素成本,即weight第三个变量。

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

在此处输入图像描述

图 4:绘制每个 X1 - X2 组合处数据框中所有元素的总成本的比例

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

在此处输入图像描述

图 5:绘制比例,但该比例不是超出数据框中所有元素的总成本,而是超出 X1 每个类别中元素的成本。也就是说,在每个 X1 类别中,X2 单位的主要成本出现在哪里?

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

在此处输入图像描述

于 2012-06-28T03:08:09.827 回答
2

您可以将ddply调用放入qplot

d <- data.frame(x=1:10, y=1:10, z= runif(100))
qplot(x, y, data=ddply(d, .(x,y), transform, z=sum(z)), size=z)

或者使用data.table包。

DT <- data.table(d, key='x,y')
qplot(x, y, data=DT[, sum(z), by='x,y'], size=V1)
于 2012-06-27T21:45:14.267 回答