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ですか?そうでない場合は、これらの2行を書くための最良の方法は何でしょうか。

4

2 に答える 2

8

stat_sumggplot2 内で使用できます。デフォルトでは、ドット サイズは縦横比を表します。カウントを表すドット サイズを取得するにはsize = ..n..、美学として使用します。weight = cost第 3 変数によるカウント (および割合)は、美的観点から、第 3 変数 ( ) による重み付けによって取得できます。いくつかの例ですが、最初にいくつかのデータを示します。

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

ここに画像の説明を入力

プロット 2: X1 - X2 の各組み合わせでの要素数をプロットします。

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

ここに画像の説明を入力

プロット 3: X1 と X2 の各組み合わせでの要素のコストを、つまりweight3 番目の変数でプロットします。

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 に答える