19

いくつかの棒グラフを作成していますが、x 軸の上か下かに応じて、グラフの棒に色を付けることができるのではないかと考えていました。

明確にするために、これは私が意味する棒グラフのタイプです:

ここに画像の説明を入力

理想的には、グラフがより魅力的に見えるように、上のバーを別の色で下のバーに色付けできるようにしたいのですが、検索してみましたが、これを行う方法が見つかりません。

前もって感謝します。:)

4

4 に答える 4

34

1 つの戦略を次に示します。

## Create a reproducible example
set.seed(5)
x <- cumsum(rnorm(50))

## Create a vector of colors selected based on whether x is <0 or >0  
## (FALSE + 1 -> 1 -> "blue";    TRUE + 1 -> 2 -> "red")
cols <- c("blue", "red")[(x > 0) + 1]  

## Pass the colors in to barplot()   
barplot(x, col = cols)

2 つ以上の値ベースの色が必要な場合は、同様の戦略を採用できます (findInterval()単純な論理テストの代わりに使用します)。

vals <- -4:4
breaks <- c(-Inf, -2, 2, Inf)
c("blue", "grey", "red")[findInterval(vals, vec=breaks)]
# [1] "blue" "blue" "grey" "grey" "grey" "grey" "red"  "red"  "red" 

ここに画像の説明を入力

于 2012-10-28T21:06:00.083 に答える
20

を使用したggplot2ソリューション。geom_barstat_identity

library(ggplot2)
ggplot(dat, aes(x= seq_along(x), y = x)) + 
  geom_bar(stat = 'identity', aes(fill = x>0), position = 'dodge', col = 'transparent') + 
  theme_bw() + scale_fill_discrete(guide = 'none') + 
  labs(x = '', y = 'NAO Index')

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

scale_fill_discrete(guide = 'none')凡例を削除position = 'dodge'し、デフォルトからの警告を停止しますposition = 'stack'

于 2012-10-28T23:09:28.060 に答える
15

1 つの方法は、論理変数または因子変数を使用して色のベクトルにインデックスを付けることです (これは R の一般的なイディオムです。

set.seed(1)
NAO <- rnorm(40)
cols <- c("red","black")
pos <- NAO >= 0
barplot(NAO, col = cols[pos + 1], border = cols[pos + 1])

ここでのトリックは次のposとおりです。

> pos
 [1] FALSE  TRUE FALSE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE FALSE
[11]  TRUE  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE  TRUE  TRUE
[21]  TRUE  TRUE  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE
[31]  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE

barplot()呼び出しでこれを数値に強制します 。

> pos + 1
 [1] 1 2 1 2 2 1 2 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 2 1 2 1 1 1 1 2
[31] 2 1 2 1 1 1 1 1 2 2

1s とs のベクトル2は、 color のベクトルから次のcolsように要素を選択します。

> cols[pos + 1]
 [1] "red"   "black" "red"   "black" "black" "red"   "black"
 [8] "black" "black" "red"   "black" "black" "red"   "red"  
[15] "black" "red"   "red"   "black" "black" "black" "black"
[22] "black" "black" "red"   "black" "red"   "red"   "red"  
[29] "red"   "black" "black" "red"   "black" "red"   "red"  
[36] "red"   "red"   "red"   "black" "black"

これは、描画される各バーに渡される色です。

上記のコードでは、引数を使用して、バーの境界線を関連する色に設定していますborder

結果のプロットは次のようになります

ここに画像の説明を入力

于 2012-10-28T21:10:32.017 に答える
3

要因に応じて棒グラフの個々の棒に色を付ける方法についてのヘルプを探しているときに、このページを見つけました。他の情報源は見つかりませんでしたが、このページのおかげで、これを思いつきました:

cols <- ifelse(df$Country == "グリーンランド", "緑","青")

次に、上記の通常の方法で barplot に渡されます。

barplot(x, col = cols)

于 2016-07-18T11:08:31.897 に答える