4

たとえば、基本的な積み上げプロットがあります。

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

「カラット」値が 3 より大きい小さなサブセット ダイヤモンドがあります。

subset(diamonds,carat>3)

プロット上のこの特定の値 (ダイヤモンドに ID がある場合はポイントやラベルなど) を強調表示して、それらが分布のどの部分にあるかを確認したいと思います。そのようなことをする可能性はありますか?

PS: 残念ながら、数字を投稿することはできません。

4

1 に答える 1

2

以下は、「3より大きいカラット」のカウントをバーセグメントに挿入します。私は問題をいくつかのステップに分解しました。ステップ1:「3より大きいカラット」を識別する新しい変数。ステップ2:カウントの要約表を取得します-各色とカットのダイヤモンド、および各色とカットの「3より大きいカラット」。plyrパッケージのddply()関数を使用しました。ステップ3:棒グラフラベルなしでプロットします。ステップ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"))

ここに画像の説明を入力してください

于 2012-04-20T23:27:26.443 に答える