2012-04-20 13 views
4

私は基本積層プロットがあります。ggplot2プロットの値のサブセットを強調表示するにはどうすればよいですか?例えば

ggplot(diamonds, aes(x=factor(color),fill=factor(cut)))+geom_bar(position="fill")

を、私は3よりも高い「カラット」の値で小さなサブセットのダイヤモンドを持っている:

subset(diamonds,carat>3) 

と私は、この特定の値を強調したいです分布のどの部分が横たわっているかを知るためにプロット(ポイントやラベルにIDが付いている場合など)そんなことをする可能性はありますか?

PS:残念ながら私は数字を投稿できません。

答えて

2

以下は、「3より大きいカラット」のカウントをバーセグメントに挿入します。私は問題をいくつかのステップに分けた。ステップ1:「3より大きいカラット」を識別する新しい変数。ステップ2:各色と切り取りのダイヤモンドと、各色と切り口の "3より大きいカラット"の数のサマリーテーブルを取得する。私はplyrパッケージからddply()関数を使用した。ステップ4:ラベルのy位置を与える変数を要約テーブルに追加するステップ5:geom_textレイヤーをプロットに追加するgeom_textのデータフレームはサマリーテーブルであるgeom_text()には美観が必要ラベル(この場合、「3より大きいカラット」のカウント)、y位置(前のステップで計算された)、およびx位置(カラー)

library(ggplot2) 
library(plyr) 

# Step 1 
diamonds$caratGT3 = ifelse(diamonds$carat > 3, 1, 0) 

# Step 2 
diamonds2 = ddply(diamonds, .(color, cut), summarize, CountGT3 = sum(caratGT3)) 
diamonds2$Count = count(diamonds, .(color, cut))[,3] 
diamonds2 

# Step 3 
p = ggplot() + geom_bar(data = diamonds, aes(x=factor(color),fill=factor(cut))) 

# Step 4 
diamonds2 <- ddply(diamonds2,.(color), 
     function(x) { 
      x$cfreq <- cumsum(x$Count) 
      x$pos <- (c(0,x$cfreq[-nrow(x)]) + x$cfreq)/2 
      x 
     }) 

# Step 5 
(p <- p + geom_text(data = diamonds2, 
    aes(x = factor(color), y = pos, label = CountGT3), 
    size = 3, colour = "black", face = "bold")) 

enter image description here