火山情节 - 颜色

时间:2017-09-08 16:24:49

标签: r plot ggplot2

我试图用ggplot2绘制火山图。我想根据以下标准有三种不同的颜色:

  1. qvalue< 0.05和meth.diff> 25%=红色
  2. qvalue< 0.05和meth.diff< -25%(减去25%)=绿色
  3. qvalue< 0.05和meth.diff在+25和-25 = Gray
  4. 之间

    之前已经在这里提出了类似的问题,我尝试过关注它们,但不断收到错误消息。任何建议都将受到高度赞赏。

    这是原始数据文件:

        chr  start    end strand       pvalue       qvalue  meth.diff
    16 chr1  37801  38100      * 2.246550e-05 4.487042e-04  -36.485769
    17 chr1  38101  38400      * 5.699781e-06 1.376471e-04  55.755181
    29 chr1  49501  49800      * 1.453030e-18 2.442391e-16 -18.381131
    35 chr1  62701  63000      * 5.547627e-03 3.686303e-02  -31.871711
    54 chr1 122401 122700      * 3.917230e-03 2.845933e-02   63.443366
    57 chr1 130201 130500      * 8.941091e-04 9.253737e-03  -8.347167
    
    myDiff1p$threshold = factor(ifelse(myDiff1p$meth.diff>25 & myDiff1p$qvalue< 0.05, 1, 
      ifelse(myDiff1p$meth.diff<-25 & myDiff1p$qvalue< 0.05,-1,0)))
    
    ggplot(data=myDiff1p, aes(x=meth.diff, y=-log10(qvalue))) + 
      geom_point(aes(color=myDiff1p$threshold), alpha=0.4, size=1.75)+ 
      geom_vline(xintercept=c(-25,25), color="red", alpha=1.0)+ 
      geom_hline(yintercept=2, color="blue", alpha=1.0)+ 
      xlab("Differential Methylation")+ 
      ylab("-log10 (qvalue)")+ 
      theme_bw()+
      xlim(c(-75, 75)) + 
      ylim(c(0, 300))
    
      

    错误:提供给连续刻度的离散值

1 个答案:

答案 0 :(得分:2)

你在这一行中犯了一个几乎无法察觉的错误:

myDiff1p$threshold = factor(ifelse(myDiff1p$meth.diff>25 & myDiff1p$qvalue< 0.05, 1, 
   ifelse(myDiff1p$meth.diff<-25 & myDiff1p$qvalue< 0.05,-1,0)))

由于myDiff1p$meth.diff<-25中没有空格,因此它被解释为myDiff1p$meth.diff <- 25而不是myDiff1p$meth.diff < -25。结果,meth.diff搞砸了。

以下是我的建议:

library(dplyr)

myDiff1p <- myDiff1p %>%
  mutate(threshold = factor(case_when(meth.diff > 25 & qvalue < 0.05 ~ "cond1",
                                      meth.diff < -25 & qvalue < 0.05 ~ "cond2",
                                      TRUE ~ "cond3")))

ggplot(data=myDiff1p, aes(x=meth.diff, y=-log10(qvalue))) + 
  geom_point(aes(color=myDiff1p$threshold), alpha=0.4, size=1.75)+ 
  geom_vline(xintercept=c(-25,25), color="red", alpha=1.0)+ 
  geom_hline(yintercept=2, color="blue", alpha=1.0)+ 
  xlab("Differential Methylation")+ 
  ylab("-log10 (qvalue)")+ 
  theme_bw()+
  xlim(c(-75, 75)) +
  ylim(c(0, 300)) +
  scale_color_manual(name = "Threshold",
                     values = c("cond1" = "red", "cond2" = "green", "cond3" = "grey"))

plot

我按条件标记了阈值因子,&amp;定义条件和条件之间的映射scale_color_manual()中命名向量中的颜色。此外,这是个人偏好的问题,但我认为dplyr::case_when()看起来比嵌套的ifelse()语句更整洁。