写在前面:有了到B站做up主的想法,初步的想法是录制一些用R语言做数据处理和数据可视化的一些实例。大家如果刚好有数据处理或者数据可视化的问题可以给我的公众号留言。如果我刚刚好会用R语言来解决这个问题的话我就把解决这个问题录制成视频分享出来。
昨天的笔记《ggplot2实现一幅自己叫不上来名字的图》发出后,有三位小伙伴在文章下留言给出了不一样的解决办法,非常感谢!
今天的笔记整理下三位小伙伴的留言!
第一位留言说:在pheatmap中可以画的,通过先赋值ann_colors=list(group=c('Control'="#ff0000",'Treatment'="#0000FF")),这实现的
自己之前只用过pheatmap这个包做简单的热图,没有用到过ann_colors这个参数。
那么通过查看一下帮助文档来看一下这个参数的用法 查看帮助文档用到的是help(package="pheatmap")
首先构造一份数据集,画一个最基本的热图
代码语言:javascript复制test = matrix(rnorm(200), 20, 10)
colnames(test) = paste("Test", 1:10, sep = "")
rownames(test) = paste("Gene", 1:20, sep = "")
library(pheatmap)
pheatmap(test)
image.png
添加一些额外的信息
代码语言:javascript复制annotation_col = data.frame(
CellType = factor(rep(c("CT1", "CT2"), 5)),
Time = 1:5
)
annotation_col
rownames(annotation_col) = paste("Test", 1:10, sep = "")
annotation_col
pheatmap(test, annotation_col = annotation_col)
annotation_row = data.frame(
GeneClass = factor(rep(c("Path1", "Path2", "Path3"), c(10, 4, 6)))
)
rownames(annotation_row) = paste("Gene", 1:20, sep = "")
pheatmap(test,
annotation_col = annotation_col,
annotation_row = annotation_row)
image.png
那么实现前一篇文章提到的图就有思路了:构造数据
代码语言:javascript复制df<-matrix(sample(1:10,10,replace = T),1,10)
df
rownames(df)<-"gene"
colnames(df)<-paste0("Sample",1:10)
pheatmap(df,cluster_cols = F,cluster_rows = F)
annotation_col = data.frame(
CellType = factor(rep(c("CT1", "CT2"), 5)),
Time = 1:5,
teamA = factor(rep(c("Laker", "spur"), 5)),
teamB = factor(rep(LETTERS[1:5],2)),
teamC = factor(rep(c("NameA","NameB"),5))
)
rownames(annotation_col)<-colnames(df)
pheatmap(df,cluster_cols = F,
cluster_rows = F,
legend = F,
annotation_col = annotation_col,
border_color = NA,cellheight = 0.2,
annotation_legend = F,
labels_row = c(""))
image.png
遇到的问题是:图片上下空白太多,不知道如何用代码去掉上下的空白,想到的办法是出图后再裁剪。
自定义颜色:
代码语言:javascript复制ann_colors=list(teamA=c(Laker = "orange",spur = "darkgreen"),
CellType=c(CT1="red",CT2="blue"),
Time=c("grey","red"))
pheatmap(df,cluster_cols = F,
cluster_rows = F,
legend = F,
annotation_col = annotation_col,
border_color = NA,cellheight = 0,
annotation_legend = F,
labels_row = c(""),
annotation_colors = ann_colors)
image.png
加上图例的效果
代码语言:javascript复制pheatmap(df,cluster_cols = F,
cluster_rows = F,
legend = F,
annotation_col = annotation_col,
border_color = NA,cellheight = 0,
annotation_legend = T,
labels_row = c(""),
annotation_colors = ann_colors)
image.png
如何调整图例的位置,暂时想不到比较好的办法,出图后手动调整吧!
第二位的留言说:
试试这个 p1.2<-p1 theme(plot.margin=margin(b=-0.6,unit="cm")) p2.2<-p2 theme(plot.margin=margin(b=-0.6,unit="cm")) p3.2<-p3 theme(plot.margin=margin(b=-0.6,unit="cm")) library(patchwork) p1.2 / p2.2 / p3.2 plot_layout(guides = 'collect') ggsave("1-3-7.png",width=30.2,height=15.2,units="cm",dpi=600)
运行代码看一下出图效果:
代码语言:javascript复制p1.2<-p1 theme(plot.margin=margin(b=-0.6,unit="cm"))
p2.2<-p2 theme(plot.margin=margin(b=-0.6,unit="cm"))
p3.2<-p3 theme(plot.margin=margin(b=-0.6,unit="cm"))
p1.2 / p2.2 / p3.2 plot_layout(guides = 'collect')
ggsave("1-3-7.png",width=30.2,height=15.2,units="cm",dpi=600)
image.png
看起来好了很多,感谢感谢!