1

我正在尝试绘制一个 ggplot2 图,但使用两种不同的色标,一种是用户定义的,另一种是由我的 data.frame 中的单独列定义的。

这在示例中更容易显示:

gene   chr     start       end    aceth   acvitd disttss    density       fc     color
1   MAP6D1  chr3 183527379 183528379 1.458988 2.190145 15514.0 0.06652449 1.501140 increased
2  MIR6729  chr1  12111873  12112873 1.581880 2.373651 23159.0 0.06244715 1.500525 increased
3 ATP6V0A4  chr7 138440797 138443072 1.517358 2.276540 41006.5 0.06244715 1.500331 increased
4    PRKCQ chr10   6560041   6562565 2.054282 3.081668 61305.0 0.01572513 1.500119 increased
5   UBE2L6 chr11  57327153  57329079 0.972952 1.458081  7687.0 0.12156697 1.498615 unchanged
6  FAM109B chr22  42469873  42471646 1.150138 1.723444   505.5 0.18451594 1.498468 unchanged

我可以使用此代码绘制下图:

heatmap <-  ggplot(acall, aes(aceth, acvitd,labels=gene, colour = density)) + scale_color_viridis()
heatmap + theme_bw(base_size = 14) # same theme as other graphs
heatmap <- heatmap + geom_point()

这给了我一个很好的渐变填充我的图表使用我的data.frame中的渐变列。

渐变填充散点图

然而,然后我想用不同颜色的 fc 大于或小于截止值来标记基因,但在这个渐变填充中保持不变的基因。

我可以做第一部分:

cols <- c("red" = "red", "unchanged" = "darkgrey", "increased" = "#00B2FF", "decreased" = "#00B2FF")

heatmap <-  ggplot(acall, aes(aceth, acvitd,labels=gene, fill = color))
heatmap <- heatmap + scale_y_continuous(trans = "log") + scale_x_continuous(trans = "log")
heatmap <- heatmap + geom_point(size = 2.5, alpha = 1, na.rm = T, shape = 21, colour = "black")+
  scale_fill_manual(values = cols)

这给了我一个很好的情节,其中一种颜色的“增加”和“减少”基因和深灰色的“不变”。以及一些突出显示的点,这些点指的是我之前在“颜色”列中命名的特定基因。

非梯度散射

我想做的是用渐变填充在“颜色”列中绘制“未改变”基因(因此第二个图中的灰色点),其余部分使用我定义的配色方案。

谢谢

4

1 回答 1

2

由于您没有提供所有数据组合的示例,因此我以类似的结构编写了一些示例。

library(dplyr)

df <- tibble(
    gene   = sample.int(5000),
    aceth  = rnorm(5000), 
    acvitd = rnorm(5000)
  ) %>% 
    mutate(
      dens = dnorm(aceth) + dnorm(acvitd),
      chg  = ifelse(density < 0.4 & abs(acvitd) > 2, "changed",   "unchanged"),
      dir  = ifelse(sign(acvitd) == 1,               "increased", "decreased"),
      dir  = replace(dir, gene %in% sample.int(5000, 30), "special annotation")
    )


 ggplot() + 
   geom_point(data = filter(df, chg == "unchanged"), 
              aes(aceth, acvitd, color = dens)) + 
   geom_point(data = filter(df, chg == "changed"), 
              aes(aceth, acvitd, fill = dir), 
              shape = 22, size = 3) +
   scale_fill_manual(values = c("grey70", "white", "red")) +
   scale_color_viridis() +
   theme_bw()

在此处输入图像描述

你可以改变美学以匹配你想要的,但这就是我实现那种情节的方式。

于 2017-08-24T19:44:55.540 回答