在当今科技快速发展的时代,数据可视化成为科学研究和信息传递中不可或缺的一环。在这个领域,小果带小伙伴去学习一些简单易懂绘图技巧。这次呢就和小果一起展现数据的生动变化,轻松复现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
多多关注我们公众号,一来学生信!