r - 区分 ggplot2 热图中组之间的分面
问题描述
我有这个数据框:
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)
我创建了 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")))
从下图中可以看出,我的热图分为 6 组。 并且每个组的名称相应地放置在这个灰色区域上
我想以某种方式将这个灰色区域分开,可能是 6 种不同的颜色,而不仅仅是灰色,或者在每个分开的组之间添加空间以便更好地区分。当然,我愿意接受其他建议。
解决方案
您可以在每个方面之间添加更多空间。实际上,在您的代码中,您将该空间设置为 0,这似乎不符合您的愿望。
试试这个:
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")
推荐阅读
- css - 如何用css实现这种模糊效果
- c++ - C++ operator[] 访问 SIMD(例如 AVX)变量的元素
- c# - 通过c#在Labelary api中使用ttf字体
- kotlin - 查找列表中验证条件的第一个元素
- javascript - 如何显示成功消息 NgRX 效果和调度事件
- jenkins - Git 克隆不适用于 Jenkins 管道的 EC2
- sql-server - 将查询加入另一个查询时出现 Sql 查询问题
- swift - 添加 ViewController 时出现“无法识别的选择器发送到实例”错误
- winforms - PowerShell 和 Windows 窗体工具提示自定义颜色
- r - 合并数据并将零放在 R 中不存在的缩写中