R语言 ggplot散点图点不响应颜色参数

rn0zuynd  于 2023-03-20  发布在  其他
关注(0)|答案(1)|浏览(199)

我做了一个循环来创建差异散点图列表(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")

这就是我得到的结果-我需要灰点也是绿色的:

sc4hvdpw

sc4hvdpw1#

首先,注解掉theme()层中的legend.position = "none"将显示颜色代表什么(对于ggplot),这样做应该会给予你对正在发生的事情有所了解。
但正如第一条评论所指出的:这些值通常是NA。如果我简化perc_diff的计算:
(abs(a) / (b + c) / 2) * 100
它表示如果在bc中有缺失值,则将得到NA作为结果,即第三颜色类别。
以下是abcsample的一些虚拟数据的示例,没有循环:

library(tidyverse)

df <- data.frame("a" = c(0,2,2,3,0,6,6,8,10,0),
                 "b" = c(10,3,25,45,NA,5,9,30,12,4),
                 "c" = c(3,7,4,5,18,0,3,19,3,NA),
                 "sample" = c(1,2,3,4,5,6,7,8,9,10))

df$perc_diff <- (abs(df$a)/(df$b + df$c)/2)*100

ggplot(df, aes(x = sample, y = a)) + 
  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()) +
  scale_color_manual(values=c("palegreen3", "tomato3"))

这表明NA在图例中是灰色的。此外,您会注意到,非常具体地说,您可能在bc中丢失了数据,而a0-因为您所有的灰点都在y值为0的地方。
所以检查你的数据(你对丢失的数据没意见吗),或者为NA值添加颜色类别,就像评论中指出的那样。我甚至会将"outlier""non-outlier"信息作为一列。

相关问题