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

在当今科技快速发展的时代,数据可视化成为科学研究和信息传递中不可或缺的一环。在这个领域,小果带小伙伴去学习一些简单易懂绘图技巧。这次呢就和小果一起展现数据的生动变化,轻松复现IF64.8文献中的炫酷热力图,实现指定角度的旋转。

小伙伴会在这里学到如何使用ggplot2,构建精美的热力图。而其中的重点之一,就是如何实现指定角度的旋转,使得图形更具吸引力和可读性。将学习过程变得富有趣味性,激发学习者的创造力。我们还学在复现中学习到如何选择颜色、调整尺寸、添加注释等,话不多说,我们先来看看这次要复现的内容,是来自IF64.8高分文献《Whole-genome doubling drives oncogenic loss of chromatin segregation》中的图1 d和e

这幅图第一眼看只是觉得熟悉,其实,就是热力图进行了旋转,而且图中的一些小细节也非常的有意思,比如图e中

A和B的注释,我们自己的数据要是向特殊的添加一些文本中的注释信息,也可以学习这个文献中的绘图方式,好了,我们下面就去学习吧

这里呢小果还要说明一下,我们这次做的数据分析数据量是非常大的,我们操作占用内存比较大,所以建议各位小伙伴可以使用服务器去运行,如果没有自己的服务器也没有关系,可以欢迎联系我们使用服务器租赁~

这其实是一个三角形的热图,我们从基础的学习

我们看一下,我们绘制基础的热力图是如何绘制的,

先构建一个坐标系

library(ggplot2)

#建一个散点图

pp<-ggplot()+# 创建一个ggplot对象

geom_point(aes(x=1,y=1))+#添加散点图的几何对象

coord_cartesian(clip = “off”)#设置坐标系为Cartesian坐标系

然后我们绘制图像

pp

cowplot::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) -> p2

p2

是不是有线段,我们再去修改配色,随机挑选几个颜色

#修改配色

###

library(ggsci)

library(scales) #用来展示颜色

## 自然出版集团 (Nature Publishing Group) 风格的颜色方案

mypal <- pal_npg(“nrc”, alpha = 0.7)(10)

mypal

show_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”) -> p3

p3

这样一来就是文献中差不多了,不过我们还要添加文本的信息

#额外注释

#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) -> p4

p4

既然注释信息也有了,就是最有意思的旋转了

#旋转45

library(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

其实很简单,这样一来我们的复现就完成了,一些代码的注释,小果都进行了备注,小伙伴一定要好好的理解其中的意思,将自己的数据去学习绘制,好了,快去动手试试吧!绘制出精美的图像来!

最后呢,小果给小伙伴带个小福利,如果小伙伴觉得自己运行代码太麻烦,可以试试我

们的云生信小工具哟,里面有成熟的代码,只要输入合适的数据就可以直接出想要的图呢。这是我们的网址http://www.biocloudservice.com/home.html

多多关注我们公众号,一来学生信!