先构造一个练习数据集,假设有15个病人,每个病人有年龄、性别、症状、是否有RNA-seq和WES测序等信息。
代码语言:txt复制library(ggplot2)代码语言:txt复制library(tidyverse)代码语言:txt复制library(reshape2)代码语言:txt复制library(RColorBrewer)代码语言:txt复制clinical.df=data.frame(代码语言:txt复制 patient=paste("P",seq(1:15),sep = ""),代码语言:txt复制 age=sample(20:80,15,replace = T),代码语言:txt复制 gender=sample(c("male","female"),15,replace = T),代码语言:txt复制 symptom=sample(c("mild","moderate","severe"),15,replace = T),代码语言:txt复制 RNAseq=sample(c("yes","no"),15,replace = T),代码语言:txt复制 WES=sample(c("yes","no"),15,replace = T)代码语言:txt复制)年龄可以看做是连续的,我们进一步分成三个level,最终的数据格式如下:
代码语言:txt复制clinical.df$age=ifelse(clinical.df$age < 40,"level1",代码语言:txt复制 ifelse(clinical.df$age < 60, "level2","level3"))代码语言:txt复制# head(clinical.df)代码语言:txt复制# patient age gender symptom RNAseq WES代码语言:txt复制# 1 P1 level2 female moderate yes yes代码语言:txt复制# 2 P2 level2 male mild yes yes代码语言:txt复制# 3 P3 level2 female mild no no代码语言:txt复制# 4 P4 level1 male severe no yes代码语言:txt复制# 5 P5 level2 male mild yes no代码语言:txt复制# 6 P6 level3 female moderate no yes在使用geom_tile画方块图之前,需要将宽数据转换为长数据,使用到reshape2中的melt函数
代码语言:txt复制clinical.df2=melt(clinical.df,id="patient")代码语言:txt复制# head(clinical.df2)代码语言:txt复制# patient variable value代码语言:txt复制# 1 P1 age level2代码语言:txt复制# 2 P2 age level2代码语言:txt复制# 3 P3 age level2代码语言:txt复制# 4 P4 age level1代码语言:txt复制# 5 P5 age level2代码语言:txt复制# 6 P6 age level3接下来,为了自定义图形横纵轴变量的顺序,可以人为定义因子变量,并指定因子的level。 (这种方法在实际画图中,经常用到)
代码语言:txt复制clinical.df2$patient=factor(clinical.df2$patient,levels = paste("P",seq(1:15),sep = ""))代码语言:txt复制clinical.df2$variable=factor(clinical.df2$variable,levels = c("WES","RNAseq","symptom","gender","age"))然后是自定义颜色,创建一个命名的字符串向量,表示颜色的字符串都是通过R包RColorBrewer查询的,可以参考我之前的一篇笔记:ColorBrewer配色方案
代码语言:txt复制cols=c(代码语言:txt复制 "level1"="#E5F5E0","level2"="#A1D99B","level3"="#41AB5D",代码语言:txt复制 "male"="#66C2A5","female"="#FC8D62",代码语言:txt复制 "mild"="#377EB8","moderate"="#FFFF33","severe"="#E41A1C",代码语言:txt复制 "yes"="black","no"="lightgrey"代码语言:txt复制)最后开始画图
代码语言:txt复制clinical.df2%>%ggplot(aes(x=patient,y=variable)) 代码语言:txt复制 geom_tile(aes(fill=value),color="white",size=1) #color和size分别指定方块边线的颜色和粗细代码语言:txt复制 scale_x_discrete("",expand = c(0,0)) #不显示横纵轴的label文本;画板不延长代码语言:txt复制 scale_y_discrete("",expand = c(0,0)) 代码语言:txt复制 scale_fill_manual(values = cols) #指定自定义的颜色代码语言:txt复制 theme(代码语言:txt复制 axis.text.x.bottom = element_text(size=10),axis.text.y.left = element_text(size = 12), #修改坐标轴文本大小代码语言:txt复制 axis.ticks = element_blank(), #不显示坐标轴刻度代码语言:txt复制 legend.title = element_blank() #不显示图例title代码语言:txt复制 )代码语言:txt复制ggsave("tmp.pdf",device = "pdf",width = 21,height = 7,units = "cm")图中右侧的图例并不是我们想要的,这时还需要用AI稍微编辑一下。


