私はいくつかの棒グラフを作成してきましたが、x軸の上にあるか下にあるかに応じて、グラフの棒に色を付けることは可能ですか?
明確にするために、これは私が意味する棒グラフのタイプです:
理想的には、グラフをより魅力的に見せるために、下のバーとは別の色の上にバーを色付けできるようにしたいと思っています。
前もって感謝します。 :)
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)
_
3つ以上の値ベースの色が必要な場合は、同様の戦略を使用できます(単純な論理テストの代わりに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"
_
_ggplot2
_と_geom_bar
_を使用する_stat_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'
_からの警告を停止します。
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
_
_1
_ sおよび_2
_ sのベクトルは、次のような色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
を介して、バーの境界線を関連する色に設定しています。
結果のプロットは次のようになります
因子に応じて棒グラフの個々の棒に色を付ける方法に関するヘルプを探しているときにこのページを見つけました。私は他の情報源を見つけることができませんでしたが、このページのおかげでこれを思いつきました:
cols <-ifelse(df $ Country == "Greenland"、 "green"、 "blue")
次に、上記の通常の方法でbarplotに渡されます。
barplot(x、col = cols)