R绘图(2): 离散/分类变量如何画热图/方块图

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

图中右侧的图例并不是我们想要的,这时还需要用AI稍微编辑一下,最后的效果如下:

关于ggplot2的学习,我之前整理了几篇笔记,感兴趣的小伙伴可以点击下面的链接进行阅读
ggplot2回顾(1): 认识ggplot2
ggplot2回顾(2): 图层语法入门
ggplot2回顾(3): 图层语法基础
ggplot2回顾(4): 瓦片图、多边形图
ggplot2回顾(5): 数据分布的展示
ggplot2回顾(6): ColorBrewer配色方案
ggplot2回顾(7): geom_bar()和 geom_histogram()比较
ggplot2回顾(8): 标度
ggplot2回顾(9): 分面
ggplot2回顾(10): 坐标系
ggplot2回顾(11): 主题设置
ggplot2回顾(12): 一页多图
ggplot2回顾(13): 使用plyr包整理数据
ggplot2回顾(14): 绘图函数--以平行坐标图为例
因水平有限,有错误的地方,欢迎批评指正!
R绘图(2): 离散/分类变量如何画热图/方块图的更多相关文章
- r绘图基本
R绘图命令分为三种类型: 高级绘图命令在图形设备上产生一个新的图区,它可能包括坐标轴,标签,标题等等. 低级画图命令会在一个已经存在的图上加上更多的图形元素,例如额外的点,线和标签. 交互式图形命令允 ...
- 含有分类变量(categorical variable)的逻辑回归(logistic regression)中虚拟变量(哑变量,dummy variable)的理解
版权声明:本文为博主原创文章,博客地址:,欢迎大家相互转载交流. 使用R语言做逻辑回归的时候,当自变量中有分类变量(大于两个)的时候,对于回归模型的结果有一点困惑,搜索相关知识发现不少人也有相同的疑问 ...
- 用R包中heatmap画热图
一:导入R包及需要画热图的数据 library(pheatmap) data<- read.table("F:/R练习/R测试数据/heatmapdata.txt",head ...
- R & ggplot2 & Excel绘图(直方图/经验分布图/QQ图/茎叶图/箱线图)实例
持续更新~ 散点图 条形图 文氏图 饼图 盒型图 频率直方图 热图 PCA图 3D图 火山图 分面图 分面制作小多组图 地图 练习数据: year count china Ame jap '12 2. ...
- seaborn(2)---画分类图/分布图/回归图/矩阵图
二.分类图 1. 分类散点图 (1)散点图striplot(kind='strip') 方法1: seaborn.stripplot(x=None, y=None, hue=None, data=No ...
- R数据分析:二分类因变量的混合效应,多水平logistics模型介绍
今天给大家写广义混合效应模型Generalised Linear Random Intercept Model的第一部分 ,混合效应logistics回归模型,这个和线性混合效应模型一样也有好几个叫法 ...
- R数据分析:纵向分类结局的分析-马尔可夫多态模型的理解与实操
今天要给大家分享的统计方法是马尔可夫多态模型,思路来源是下面这篇文章: Ward DD, Wallace LMK, Rockwood K Cumulative health deficits, APO ...
- 基础R绘图
前言: 在前面介绍了R的基础入门语法之后,现也将最近整理好的一些R的基础绘图实例提供给需要的朋友参考.(温馨提示:代码慎用!按照本博文实例进行练习的话最好能做到举一反三.代码多敲方为上策,切不可隔岸观 ...
- R语言-探索多个变量
目的: 通过探索文件pseudo_facebook.tsv数据来学会多个变量的分析流程 通过探索diamonds数据集来探索多个变量 通过酸奶数据集探索多变量数据 知识点: 散点图 dplyr汇总数据 ...
随机推荐
- MySQL ERROR 1040: Too many connections
如题,本章主要讲下当服务器出现 ERROR 1040: Too many connections错误时的一些处理心得. max_connections查看 ## 查看最大连接数 SHOW VARIAB ...
- 大数据开发——Hive笔记
写在前面 hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行.Hive的运行原理- ...
- Python匹配对象的groups、groupdict和group之间的关系
匹配对象的groups()方法返回一个包含所有参与匹配的子组(不含组0)的匹配到的搜索文本子串的元组,groupdict返回一个包含所有匹配到的命名组的组名为键值和命名组匹配到的搜索文本子串为值作为元 ...
- PyQt(Python+Qt)学习随笔:QTreeView树形视图的indentation属性
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QTreeView树形视图的indentation属性用于控制视图中每级数据项之间的缩进,对于顶级项 ...
- PyQt(Python+Qt)学习随笔:Designer中ItemViews类部件frameShape属性
老猿Python博文目录 老猿Python博客地址 frameShape属性是从QFrame继承的属性,对应类型为QFrame.Shape,该属性表示框架样式中的框架形状,有如下取值: 老猿Pytho ...
- Panda 交易所快报 央行数字货币测试进入C端流量入口
近年来,央行数字货币的研发进展备受市场关注.近期,Panda 交易所注意,央行数字货币研究所与滴滴出行已达成战略合作协议,共同研究探索数字人民币在智慧出行领域的场景创新和应用.此外,Panda 交易所 ...
- 【题解】AcWing 389. 直径
原题链接 题目描述 共两个问题,第一问求树的直径长度,第二问求直径的必须边 思路 第一问很好求,lyd书里有,就不再赘述. 这里建议使用两次bfs的方法,因为关系到第二问的路径,这么做比较方便. 然后 ...
- 协程gevent学习
import gevent def f1(): print(11) gevent.sleep(2) print(33) def f2(): print(22) gevent.sleep(1) prin ...
- Nginx的安装及相关配置
Nginx的安装及相关配置 Nginx 是 C语言 开发,建议在 Linux 上运行,当然,也可以安装 Windows 版本,本篇则使用 CentOS 7 作为安装环境. 一. gcc 安装 安装 n ...
- DPSK通信系统的FPGA实现
之前接触过一些FPGA的相关知识,借着实现一个简单的DPSK系统,顺便复习和记录一下Verilog HDL的简单使用方法.准备直接用一张图展现DPSK的调制解调原理,再按照模块介绍Verilog的实现 ...