简体   繁体   English

在ggplot2热图中区分组之间的构面

[英]Distinguish the faceting between groups in ggplot2 heatmap

I have this data frame: 我有这个数据框:

gene_symbol<-c("DADA","SDAASD","SADDSD","SDADD","ASDAD","XCVXCVX","EQWESDA","DASDADS","SDASDASD","DADADASD","sdaadfd","DFSD","SADADDAD","SADDADADA","DADSADSASDWQ","SDADASDAD","ASD","DSADD")
panel<-c("growth","growth","growth","growth","big","big","big","small","small","dfgh","DF","DF","DF","DF","DF","gh","DF","DF")
ASDDA<-c("normal","over","low","over","normal","over","low","over","normal","over","DF","DF","DF","DF","DF","DF","DF","DF")
ASDDb<-c("normal","over","low","over","normal","over","low","over","normal","over","DF","DF","DF","DF","DF","DF","DF","DF")
ASDDAf<-c("normal","over","low","over","normal","over","low","over","normal","over","DF","DF","DF","DF","DF","DF","DF","DF")
ASDDAf1<-c("normal","over","low","over","normal","over","low","over","normal","over","DF","DF","DF","DF","DF","DF","DF","DF")
ASDDAf2<-c("normal","over","low","over","normal","over","low","over","normal","over","DF","DF","DF","DF","DF","DF","DF","DF")
ASDDAf3<-c("normal","over","low","over","normal","over","low","over","normal","over","DF","DF","DF","DF","DF","DF","DF","DF")
ASDDAf4<-c("normal","over","low","over","normal","over","low","over","normal","over","DF","DF","DF","DF","DF","DF","DF","DF")
ASDDAf5<-c("normal","over","low","over","normal","over","low","over","normal","over","DF","DF","DF","DF","DF","DF","DF","DF")
ASDDA1<-c("normal","over","low","over","normal","over","low","over","normal","over","DF","DF","DF","DF","DF","DF","DF","DF")
ASDDb1<-c("normal","over","low","over","normal","over","low","over","normal","over","DF","DF","DF","DF","DF","DF","DF","DF")
ASDDAf1<-c("normal","over","low","over","normal","over","low","over","normal","over","DF","DF","DF","DF","DF","DF","DF","DF")
ASDDAf11<-c("normal","over","low","over","normal","over","low","over","normal","over","DF","DF","DF","DF","DF","DF","DF","DF")
ASDDAf21<-c("normal","over","low","over","normal","over","low","over","normal","over","DF","DF","DF","DF","DF","DF","DF","DF")
ASDDAf31<-c("normal","over","low","over","normal","over","low","over","normal","over","DF","DF","DF","DF","DF","DF","DF","DF")
ASDDAf41<-c("normal","over","low","over","normal","over","low","over","normal","over","DF","DF","DF","DF","DF","DF","DF","DF")
ASDDAf51<-c("normal","over","low","over","normal","over","low","over","normal","over","DF","DF","DF","DF","DF","DF","DF","DF")
Gene_states22 <- data.frame(gene_symbol, panel, ASDDA, ASDDb, ASDDAf, ASDDAf1, ASDDAf2, 
                            ASDDAf3, ASDDAf4, ASDDAf5, ASDDA1, ASDDb1, ASDDAf1, ASDDAf11,
                            ASDDAf21, ASDDAf31, ASDDAf41, ASDDAf51)

And I create 6 heatmaps with: 我使用以下方法创建了6个热图:

library(plotly)
library(ggplot2); library(reshape2)
HG3 <- split(Gene_states22[,1:15], Gene_states22$panel)
HG4 <- melt(HG3, id.vars= c("gene_symbol","panel"))
HG4 <- HG4[,-5]
HG5 <- split(HG4, HG4$panel)
pp <- ggplot(HG4, 
       aes(gene_symbol,variable)) + 
  geom_tile(aes(fill = value),
            colour = "grey50") + 
  facet_grid(~panel, scales = "free") +

  # it looks like you have more colours than values here.
  # I recommend using a named vector in this case, so that 
  # the same value always maps to the same colour.
  # e.g. values = c("DF" = "white", "low" = "red", ...)
  scale_fill_manual(values = c("white", "red", "blue", "black", "yellow", "green", "brown")) +

  labs(title = "Heatmap", x = "gene_symbol", y = "sample", fill = "value") +
  guides(fill = FALSE)+
  theme(panel.background = element_rect(fill = NA),
        panel.spacing = unit(0, "lines"),
        strip.placement = "outside")

ggplotly(pp,
         width = 1350, height = 600) %>%
  # note: specifying width / height in layout() has been deprecated
  # in recent versions of plotly. when I used it that way, I got
  # a warning to specify it within ggplotly() instead.
  layout(autosize = F, 
         hoverlabel = list(bgcolor = "white",
                           font = list(family = "sans serif", size = 9, color = "black"))) 

As you can see from the picture below my heatmap is separated into 6 groups. 从下面的图片中可以看到,我的热图分为6组。 在此处输入图片说明 and the name of each group is placed accordingly on this grey zone 并将每个组的名称相应地放在此灰色区域 在此处输入图片说明

I would like somehow to separate this grey zone maybe by 6 different colors instead of only grey or add space between each separated group in order to distinguish better. 我想以某种方式将这个灰色区域分隔为6种不同的颜色,而不是仅用灰色,或者在每个分隔的组之间添加空间以更好地区分。 Of course I would be open to other suggestions. 当然,我会接受其他建议。

You could add more space between each facet. 您可以在每个构面之间添加更多空间。 In fact, in your code, you are setting that space to 0, which does not seem to fit your desire. 实际上,在您的代码中,您正在将该空间设置为0,这似乎不符合您的期望。

Try this: 尝试这个:

 ggplot(HG4, aes(gene_symbol,variable)) + 
       geom_tile(aes(fill = value),
        colour = "grey50") + 
      facet_grid(~panel, scales = "free") +
      scale_fill_manual(values = c("white", "red", "blue", "black", "yellow", "green", "brown")) +
      labs(title = "Heatmap", x = "gene_symbol", y = "sample", fill = "value") +
      guides(fill = FALSE)+
      theme(panel.background = element_rect(fill = NA),
            panel.spacing = unit(0.5, "lines"), ## It was here where you had a 0 for distance between facets. I replaced it by 0.5 .
            strip.placement = "outside")

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM