跟着小果展现数据的生动变化,轻松复现IF64.8文献中炫酷热力图,实现指定角度旋转!






跟着小果展现数据的生动变化,轻松复现IF64.8文献中炫酷热力图,实现指定角度旋转!

小果  生信果  2024-01-24 19:00:36

在当今科技快速发展的时代,数据可视化成为科学研究和信息传递中不可或缺的一环。在这个领域,小果带小伙伴去学习一些简单易懂绘图技巧。这次呢就和小果一起展现数据的生动变化,轻松复现IF64.8文献中的炫酷热力图,实现指定角度的旋转。
小伙伴会在这里学到如何使用ggplot2,构建精美的热力图。而其中的重点之一,就是如何实现指定角度的旋转,使得图形更具吸引力和可读性。将学习过程变得富有趣味性,激发学习者的创造力。我们还学在复现中学习到如何选择颜色、调整尺寸、添加注释等,话不多说,我们先来看看这次要复现的内容,是来自IF64.8高分文献《Whole-genome doubling drives oncogenic loss of chromatin segregation》中的图1 d和e
这幅图第一眼看只是觉得熟悉,其实,就是热力图进行了旋转,而且图中的一些小细节也非常的有意思,比如图e中
A和B的注释,我们自己的数据要是向特殊的添加一些文本中的注释信息,也可以学习这个文献中的绘图方式,好了,我们下面就去学习吧
这里呢小果还要说明一下,我们这次做的数据分析数据量是非常大的,我们操作占用内存比较大,所以建议各位小伙伴可以使用服务器去运行,如果没有自己的服务器也没有关系,可以欢迎联系我们使用服务器租赁~  



公众号后台回复“111”

领取本篇代码、基因集或示例数据等文件

文件编号:240115

需要租赁服务器的小伙伴可以扫码添加小果,此外小果还提供生信分析,思路设计,文献复现等,有需要的小伙伴欢迎来撩~

    

这其实是一个三角形的热图,我们从基础的学习
我们看一下,我们绘制基础的热力图是如何绘制的,
先构建一个坐标系
library(ggplot2)#建一个散点图pp<-ggplot()+# 创建一个ggplot对象 geom_point(aes(x=1,y=1))+#添加散点图的几何对象 coord_cartesian(clip = "off")#设置坐标系为Cartesian坐标系
 然后我们绘制图像
ppcowplot::ggdraw()+#创建一个ggdraw对象,用于绘制图形#将之前创建的ggplot对象pp转换为ggplotify对象,#指定旋转角度为-45度。#将前面定义的散点图进行了角度旋转的处理 cowplot::draw_plot(ggplotify::as.ggplot(pp,angle = -45), width = 0.5,height = 0.5,#设置绘制图形的宽度和高度为0.5#设置水平和垂直方向的对齐方式 hjust = -0.2,# vjust = -0.5)
就是这种,我们将一开始的图形,进行旋转就可以达到文献中的可视化效果,
那么下面我们就开始正式的复现内容
我们先来看一下数据格式
library(readxl)#install.packages("rlang")dat<-read_excel("data1.xlsx")dat
#基础library(ggplot2)ggplot(data=dat,aes(x=x,y=y))+#添加热力图的几何对象 geom_tile(aes(fill=log2(value)))+#表示要创建矩形热力图,#fill指定了矩形的颜色映射,使用log2(value)来填充颜色 coord_equal(clip = "off") -> p#设置坐标系为等比例坐标系#clip = "off“表示图形元素可以超出坐标系的范围而不被裁剪p       
这里我们就基础的热力图绘制出来了,但是和文献中还有许多的不同,比如图例还有最重要的角度
还有一些文本的注释
我们先从文本注释复现
#添加文本标签library(tidyverse)dat %>% pull(x) %>% unique()#从数据集dat中提取x列的唯一值p+#添加文本标签的几何对象 geom_text(data=data.frame(x=1:8,y=0:7,#创建了一个新的数据框 label=dat %>% pull(x) %>% unique()), aes(x=x,y=y,label=label),angle=90 )+ theme_void() -> p1#将图形的主题设置为空p1
这里将主题设置为空,然后把注释信息放在中间,还有就是文献中有意思的,AB的注释信息,其实是在指定地方添加线段来看看如何添加的
在指定的地方添加线段
#之前创建的带有文本标签的热力图上添加了两个方框 p1+#geom_path添加路径的几何对象,用于绘制两个方框 geom_path(data=data.frame(x=c(0.5,0.5,4.5,4.5,3.5,3.5,2.5,2.5,1.5,1.5,0.5),#定义方框的形状 y=c(0.5,4.5,4.5,3.5,3.5,2.5,2.5,1.5,1.5,0.5,0.5)), aes(x=x,y=y),#指定方框路径的x和y坐标 color="black",size=1)+#设置路径的颜色为黑色,大小为1 geom_path(data=data.frame(x=c(0.5,0.5,4.5,4.5,3.5,3.5,2.5,2.5,1.5,1.5,0.5)+4, y=c(0.5,4.5,4.5,3.5,3.5,2.5,2.5,1.5,1.5,0.5,0.5)+4), aes(x=x,y=y), color="black",size=1) -> p2p2   
是不是有线段,我们再去修改配色,随机挑选几个颜色
#修改配色###library(ggsci)library(scales) #用来展示颜色## 自然出版集团 (Nature Publishing Group) 风格的颜色方案mypal <- pal_npg("nrc", alpha = 0.7)(10)mypalshow_col(mypal,ncol = 5)#####之前创建的图形(带有两个方框的热力图)进行颜色和主题的调整#scale_fill_gradient2函数调整填充颜色的渐变p2+  scale_fill_gradient2(low = scales::muted("#DC0000B2"),#设置低值颜色为深红色,#使用muted函数调整颜色透明度                       mid = "white",#设置中间值颜色为白色                       high = scales::muted("#3C5488B2"),#设置高值颜色为深蓝色                       midpoint = 0)+#设置颜色变化的中点为0#不显示图例  theme(legend.position = "none") -> p3p3
这样一来就是文献中差不多了,不过我们还要添加文本的信息
#额外注释#annotate函数添加线段注释p3+ annotate(geom = "segment",x=0.4,xend=0.4,y=0.5,yend=4.5,#从坐标(0.4, 0.5)到(0.4, 4.5)的线段 size=2,#设置线段的粗细 color="#DC0000B2")+ annotate(geom = "text", x=0.2,y=2.5, label="A",#在坐标(0.2, 2.5)处添加文本"A" angle=45,#设置文本的角度为45度 size=5)+#文本大小为5 annotate(geom = "segment", x=4.5,xend=8.5,y=8.6, yend=8.6, size=2,#置线段的粗细 color="#3C5488B2")+ annotate(geom = "text", x=6.5,y=8.8, label="B",#在坐标(6.5, 8.8)处添加文本"B" angle=45,#置文本的角度为45度 size=5) -> p4p4
既然注释信息也有了,就是最有意思的旋转了
#旋转45library(cowplot)ggdraw()+#创建一个ggdraw对象 draw_plot( ggplotify::as.ggplot(p4,angle = -45),#将之前创建的p4图形转换为ggplot对象,指定旋转角度为-45度 width = 0.7,height = 0.7,#设置插入图形的宽度和高度为0.7#设置插入图形的水平和垂直方向的对齐方式 hjust = -0.2, vjust = -0.1)+# annotate(geom = "text",#添加文本注释 x=0.5,y=0.2, label="Chromatin subcompartments" ) -> p5
p5
这样一来就是文献中内容差不多了,不多还似乎少了点什么,是图例的设置
#对之前创建的图形p2进行一些调整p2+ scale_fill_gradient2(low = scales::muted("#DC0000B2"), mid = "white", high = scales::muted("#3C5488B2"), midpoint = 0)+ theme(legend.position = "bottom")+#将图例位置设置在底部 guides(fill=guide_colorbar(title.position = "top", title.hjust = 0.5,barwidth = 20)) -> p3.1

p5+ annotation_custom(grob = ggpubr::get_legend(p3.1),#获取p3.1图形的图例 xmin = 0.1,xmax=0.9,#置插入图例的水平位置范围 ymin=0.1,ymax=0.2#设置插入图例的垂直位置范围 )-> p6
p6
不过文献中是多个图,我们也可以把多个这样的图进行组合,就比如
#多个library(patchwork)
p6+p6
其实很简单,这样一来我们的复现就完成了,一些代码的注释,小果都进行了备注,小伙伴一定要好好的理解其中的意思,将自己的数据去学习绘制,好了,快去动手试试吧!绘制出精美的图像来!

小果还提供思路设计、定制生信分析、文献思路复现;有需要的小伙伴欢迎直接扫码咨询小果,竭诚为您的科研助力!


定制生信分析

服务器租赁

扫码咨询小果


往期回顾

01

1024G存储的生信服务器,两人成团,1人免单!

02

单个数据库用腻了?多数据库“组合拳”带你打开免疫浸润新思路!

03

孟德尔随机化的准备工作,GWAS数据的网站下载方法

04

跟着小果学复现-手把手带你拿下IF=46.9Nature 级别的主成分分析(PCA)图!!