我尝试用几个位置(点)绘制以下数据以突出显示
plot(b$pos,b$log_p,col==ifelse(b$pos==c(14824849,13920386,14837470),90,100), pch=19, xlab='Chromosome 21 position', ylab='-log10(p)')
生成的图表只显示一个突出显示为红色的点,并显示以下警告消息:
In b$pos == c(14824849, 13920386,14837470) : longer object length is not a multiple of shorter object length
答案 0 :(得分:2)
好的,这个问题可能是你在ifelse的条件。如果您在ifelse()之外尝试条件(b$pos==c(14824849,13920386,14837470)
),您将收到以下错误消息:
较长的物体长度不是较短物体长度的倍数
如果您将条件更改为:
b$pos %in% c(14824849,13920386,14837470)
您将获得一个TRUE / FALSE值的向量,用于确定b $ pos中的每个条目是否存在于向量中(14824849,13920386,14837470),而不是b $ pos中的条目是否等于c(14824849,13920386) ,14837470)。
x = c(49, 7, 66, 51, 43, 70, 35, 53, 6, 29)
y = c(10, 98, 44, 31, 37, 14, 64, 84, 4, 34)
x %in% c(6, 7)
[1] FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
plot(x, y, col=ifelse(x %in% c(6, 7), 'red', 'blue'))
现在这个数据集有10个x
值,如果你要写这个:
plot(x, y, col=ifelse(x == c(1, 7), 'red', 'blue'))
这样可以正常工作,x值将与1和7交替比较,例如:
49 == 1 ?
7 == 7 ?
66 == 1?
51 == 7? .... etc etc.
错误信息是说你的矢量长度3并没有完全进入b $ pos的长度。
答案 1 :(得分:0)
在tidyverse
和ggplot
中,您可以尝试
library(tidyverse)
tibble(x = c(49, 7, 66, 51, 43, 70, 35, 53, 6, 29),
y = c(10, 98, 44, 31, 37, 14, 64, 84, 4, 34),
gr=x %in% c(6, 7)) %>%
ggplot(aes(x,y, col=gr)) +
geom_point(size=2) +
ggalt::geom_encircle(data= . %>% filter(gr), color="green", s_shape=0) +
theme_bw()
使用ggalt::geom_encircle
功能,您可以在兴趣点周围画一个圆。