2012-06-27 10 views
10

ggplot2とデータを合計する方法はありますか?ggplotとの合計/合計

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で可能ですか?もしそうでなければ、これらの2行を書くにはどうすればよいでしょうか。

答えて

6

これはggplot2内でstat_sumを使用して行うことができます。デフォルトでは、ドットサイズは比率を表します。カウントを表すためにドットサイズを取得するには、審美的にsize = ..n..を使用します。第3の変数によるカウント(および比率)は、第3の変数(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の2つの要因によって分類された単位が含まれています。各ユニットのコストである第3の変数とを含む。

プロット1:各X1-X2の組み合わせでの割合がの要素をプロットします。 group=1は、ggplotにデータフレーム内のユニットの総数のうちの割合を計算するよう指示します。

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

enter image description here

プロット2:各X1における要素のプロット - X2の組み合わせ。

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

enter image description here

プロット3:各X1におけるプロット要素のコスト - 第三変数によってweightあるX2の組み合わせ、。

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

enter image description here

プロット4:各X1におけるデータフレームのプロットのすべての要素の合計コストの割合 - X2の組み合わせ

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

enter image description here

プロット5:比率をプロットしますが、データフレーム内のすべての要素の合計コストに占める割合の代わりに、割合はelのコスト外ですX1の各カテゴリ内のements。つまり、各X1カテゴリ内で、X2ユニットの主要コストはどこで発生しますか?

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

enter image description here

+0

私の質問プロット#3への答えは? – mb14

+0

申し訳ありませんが、私はそう言っていたはずです。はい。 –

2

あなたはqplotddplyコール置くことができます:

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

私はあなたのソリューションは、私の最初の試みと同等である、ことを私が行うことができます知っています。私は 'x、y'を2回(同じ行または2つの異なる行に)指定する必要がないようにしたい – mb14