前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

R绘图

原创
作者头像
ruochen
发布2021-12-06 13:14:56
9380
发布2021-12-06 13:14:56
举报
文章被收录于专栏:若尘的技术专栏

先构造一个练习数据集,假设有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稍微编辑一下。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档