Une façon de procéder consiste à indexer un vecteur de couleurs à l'aide d'une variable logique ou factorielle (il s'agit d'une pratique courante dans R.).
set.seed(1)
NAO <- rnorm(40)
cols <- c("red","black")
pos <- NAO >= 0
barplot(NAO, col = cols[pos + 1], border = cols[pos + 1])
L'astuce consiste à 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
que nous transformons en valeur numérique dans le barplot()
appel :
> 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
Le vecteur de 1
et 2
s sélectionne des éléments du vecteur de couleur cols
, tel que :
> 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"
qui est la couleur transmise à chaque barre dessinée.
Dans le code ci-dessus, j'ai également fixé la bordure des barres à la couleur appropriée, via l'argument border
.
Le tracé obtenu devrait ressembler à ceci