我做了一个循环来创建差异散点图列表(y轴)与样品对于这些图,异常值定义为同一样本的两次计数之间的差异大于10%的样本。我将异常值标为红色,并希望非异常值标为绿色,但出于某种原因,它们显示为绿色和灰色(特别是我认为差值= 0的点是灰色的)。我很想知道我的代码中是否有我遗漏的错误?
下面是我创建散点图列表的代码
myplots <- list()
for (x in c(1:length(stage2))) {
message(stage2[x])
myplots[[stage2[x]]] <- local({
x <- x
perc_diff <- (abs(df[, paste0("D_", stage2[x])])/
(df[, paste0("M_", stage2[x])] +
df[ , paste0("H_", stage2[x])])/2)*100
sct <- ggplot(df, aes(x=sample, y= df[, paste0("D_", stage2[x])])) +
geom_point(df, size= 2.2,
mapping = aes(colour = ifelse(perc_diff >= 10 , "outlier",
"non-outlier"))) +
labs(y = "", x= "") +
theme(axis.text.x = element_blank(),
axis.ticks.x=element_blank(),
legend.position = "none") +
scale_color_manual(values=c("palegreen3", "tomato3"))
print(sct)
})
}
然后,我给它们加上标题,并使用grid arrange来排列它们:
for (i in c(1:length(D_stage))){
myplots[[i]] <- myplots[[i]] + ggtitle((stage2[i])) +
theme(plot.title = element_text(size = 25))
}
gridExtra::grid.arrange(grobs = myplots, ncol = 2,
left = "count difference", bottom = "sample")
这就是我得到的结果-我需要灰点也是绿色的:
1条答案
按热度按时间sc4hvdpw1#
首先,注解掉
theme()
层中的legend.position = "none"
将显示颜色代表什么(对于ggplot),这样做应该会给予你对正在发生的事情有所了解。但正如第一条评论所指出的:这些值通常是
NA
。如果我简化perc_diff
的计算:(abs(a) / (b + c) / 2) * 100
它表示如果在
b
或c
中有缺失值,则将得到NA
作为结果,即第三颜色类别。以下是
a
、b
、c
和sample
的一些虚拟数据的示例,没有循环:这表明
NA
在图例中是灰色的。此外,您会注意到,非常具体地说,您可能在b
或c
中丢失了数据,而a
是0
-因为您所有的灰点都在y值为0的地方。所以检查你的数据(你对丢失的数据没意见吗),或者为
NA
值添加颜色类别,就像评论中指出的那样。我甚至会将"outlier"
和"non-outlier"
信息作为一列。