This is a test version of Biostars. For the public version, visit https://www.biostars.org.
coloring a plot

Hello everyone! I would like to have a plot with some points in different colors; but I get an empty plot. Could someone help me?

a=data.frame(b= c(1:26), c=rnorm(26), d=paste(letters[1:26]))
e=data.frame(a$d[3:15])
colnames(e)=c("d1")

variant 1

plot(a$b, a$c, col= (if (a$b<5) {'red'} else (for (i in 1:26) {if (a$d[i] == e$d1) {'blue'} else {'black'}})))

Warning message: In if (a$b < 5) { : the condition has length > 1 and only the first element will be used

variant 2

plot(a$b, a$c, col= for (i in 1:26) {if (a$d[i]%in%e$d1) {'blue'} else {'black'}})

Warning message: In if (a$b < 5) { : the condition has length > 1 and only the first element will be used

d are the labels of each element coordinates (b;c), number of elements =26

e: data frame with a subset of character elements from a$d

I would like the elements a$b < 5 in red, a$d == e$d1 to b colored in ‘blue’ and the rest in ‘black’ Thanks in advance Roberto

r plot conditional plot colors

1 answer

Here is already an answer for variant 2:

plot(a$b, a$c, col= ifelse((a$d%in%e$a.d.3.15.), "blue", "black"))

the problem lies in your conditionnal statement.

NB: e=data.frame(a$d[3:15]) should be e=data.frame(d1=a$d[3:15]) if you want to use e$d1 afterwards.

Update: here is a conditionnal statement for your variant 1:

colors <- sapply(a$b, function(x) if(x < 5) "red" else if(a$d[x] %in% e$a.d.3.15.) "blue" else "black")
plot(a$b, a$c, col=colors)

Your previous if/else argument was not looping through your data. if(a$b < 5) was only looking at the first argument of your vector.

Log in to answer this question.