在当今信息时代,数据可视化成为解读复杂数据的重要工具,这次小果将带小伙伴一同探索多样化的数据可视化,通过简单的R代码轻松复现一篇IF30.8高分文献中的令人赏心悦目的组合图:柱状图+饼图+线型图。我们先来看我们这次复现的内容,是来自IF30.8《Pangenome analysis provides insight into the evolution of the orange subfamily and a key gene for citric acid accumulation in citrus fruits》中的图3a和b
其实,数据可视化是解读和交流数据的关键工具,而R语言以其强大的绘图能力成为科学家们的首选。在这个图中,我们将聚焦文献中的组合图,这个图包括柱状图、饼图和线型图。这篇文献以其卓越的质量和独特的数据呈现方式获得高度评价。所以,跟随“小果”的指引,将带小伙伴亲身体验如何用简单的代码在R中实现这些引人入胜的可视化效果。
柱状图是展示各类别之间关系的经典工具,而饼图则以清晰的部分整体比例为我们呈现数据的构成。线型图则适用于描绘趋势和变化。这三者的巧妙结合使得我们能够全面了解文献中所探讨的数据背后的故事。
这里呢小果还要说明一下,我们这次做的数据分析数据量是非常大的,我们操作占用内存比较大,所以建议各位小伙伴可以使用服务器去运行,如果没有自己的服务器也没有关系,可以欢迎联系我们使用服务器租赁~
我们复现之前观察一下这幅图,饼图和柱状图组合在一起,而且这个饼图仿佛是镶嵌在柱状图中间,非常有意思,我们下面就去学习一下如何绘制这类型的图!
首先呢,我们先看一下图的数据格式,
library(tidyverse)
#这里我们还有加载一个包
library(readxl)#将 Excel 文件(.xls 和 .xlsx)读取到 R 中而设计的
dat1<-read_excel(“data1.xlsx”,
sheet = “Sheet1”)
这个是柱状图的数据,
我们从柱状图绘制,其实这个图小伙伴肯定都熟悉,我们一步到位
p1<-ggplot(data=dat1,aes(x=family,y=num))+
geom_col(aes(fill=class),
show.legend = FALSE)+# # 基于“class”进行颜色填充条形图
theme_bw(base_size = 15)+##将主题设置为黑白,基本字体大小为 15
theme(panel.grid = element_blank(),# 删除网格线
panel.border = element_blank(),# 删除面板边框
axis.line = element_line())+# 删除轴线
scale_y_continuous(expand = expansion(mult=c(0,0.01)),# 稍微扩大 y 轴范围
breaks = seq(0,10000,2500),# 设置 y 轴断点
labels = scales::comma)+# 用逗号格式化 y 轴标签
scale_x_continuous(breaks = c(0,5,10,15))+# 设置 x 轴中断
labs(x=”Number of genomes”,y=”Family number”)+# 设置轴标签
scale_fill_manual(values = c(“special”=”#c99e22”,# 设置’class’的手动填充颜色
“dispensable”=”#a5ae00”,
“softcore”=”#df94a0”,
“core”=”#d97168”))
p1
这里模拟文献中的数据,其实代码都很简单,小果这里就不分解讲,代码的注释小果都进行了标记
那么接下来我们就是绘制第二幅图,
有意思的饼状图
这里小果模拟一下实验数据,
还是先加载要使用的包
library(scatterpie)#创建带有饼图标记的散点图的包
然后小果创建了一个名
#为dat2“x”、“y”、“region”、“Core”、“Softcore”、“Dispensable”和“Special”列的数据框
dat2<-data.frame(x=1,y=1,
region=1,
Core=10331,
Softcore=2036,
Dispensable=19138,
Special=3059)
我们看看数据长什么样
很简单,就是不同数据的占比还有数量,这里小果随机设置的
为了和文献中一样呢,小果这里把图注的名字也改成一样的,直接绘制:
p2<-ggplot()+#初始化一个新的 ggplot 对象
#将带有饼图标记的散点图添加到 ggplot 中
geom_scatterpie(data=dat2,#指定数据框dat2
aes(x,y,group=region,r=1),#定义美观的x 和 y 坐标、按“区域”分组以及饼图标记的固定半径 1
cols=c(“Core”,”Softcore”,”Dispensable”,”Special”),#指定用作饼图类别的列
color=”black”,#将饼图边框的颜色设置为黑色
show.legend=FALSE)+#隐藏图例
coord_equal()+#确保 x 轴和 y 轴的缩放比例相等
theme_void(base_size = 15)+#将主题设置为空(无背景、轴线或标签),基本字体大小为 15
#向绘图添加文本注释,参数设置x和y坐标、标签文本和文本旋转角度
annotate(geom = “text”,x=1.3,y=1.5,label=”Core\n10331 (29.88%)”,
angle=0)+
annotate(geom = “text”,x=2.1,y=0.5,label=”SoftCore\n2036 (5.89%)”,
angle=0)+
annotate(geom = “text”,x=0.5,y=1,label=”Dispensable\n19138 (55.37%)”,
angle=0)+
annotate(geom = “text”,x=0.6,y=2.15,label=”Private\n3059 (8.85%)”,
angle=20)+
#向绘图添加线段,参数包括每条线段的起始和结束坐标
annotate(geom = “segment”,x=0.7,xend=0.6,y=1.95,yend=2.05)+
annotate(geom = “segment”,x=1.88,xend=2.0,y=0.5,yend=0.5)+
#动设置不同饼图类别的填充颜色
scale_fill_manual(values = c(“Special”=”#c99e22”,
“Dispensable”=”#a5ae00”,
“Softcore”=”#df94a0”,
“Core”=”#d97168”))
p2
其实绘图很简单, 最主要的还是对细节的修改,小伙伴不知道这个图中特殊标签如何标记,或者颜色等设置,小果对代码都进行了注释,
下面就是最重要的一点了,就是绘制我们的“镶嵌”的组合图
这里就是需要一个包,专门扩展 ggplot2 的附加功能的包ggpmisc
#组合
library(ggpmisc)
然后我们就进行绘制
p1+#
#指定新子图的数据,其中“x”和“y”是坐标,“plot”是包含第二个图的列表 ( p2)
geom_plot(data=tibble(x=2,y=10000,plot=list(p2)),
aes(x=x,y=y,label=plot),#定义子图的美观,x 和 y 坐标以及代表第二个图的标签
vp.width=0.8,vp.height=0.8)#设置子图视口的宽度和高度
效果怎么样,是不是和文献中的镶嵌类型一样,其实就是两幅图包含的关系,
那么接下来就是我们第三副图,线型图,小伙伴估计见的不多,所以这次小果就一次性教给大家
我们来看一下图形的数据格式
#线型图
dat3<-read_excel(“data2.xlsx”,
sheet = “Sheet1”) %>%
pivot_longer(!`Number of genomes`) %>%
#用mutate函数将“基因组数量”列转换为具有指定级别的因子
mutate(`Number of genomes`=factor(`Number of genomes`,levels = 1:18))
其实就是两组不同的数据,
然后我们就绘制图吧,
ggplot(
#使用指定的初始化 ggplot 对象,
#将“基因组数量”映射到 x 轴,将“值”映射到 y 轴,
#并使用“Number of genomes”进行填充和颜色
data=dat3,aes(x=`Number of genomes`,
y=value,
fill=name,
color=name))+
#使用该函数将误差线添加到绘图中
stat_boxplot(geom=”errorbar”,
width=0.3,
position = position_dodge(0.8))+
geom_boxplot()+#将主箱线图图层添加到图中
theme_bw(base_size = 15)+#将主题设置为黑白,基本字体大小为 15
#整主题设置
theme(legend.position = c(0.8,0.5),#图例位置
legend.background = element_rect(fill=”transparent”),#图例背景
panel.grid = element_blank())+#去除面板网格线
labs(x=”Number of genomes”,y=”Number of gene families”)+#设置 x 和 y 轴标签
scale_fill_discrete(name=NULL,labels=c(“Core”,”Pan”))+#修改图例以实现填充美观,将图例名称设置为 NULL 并提供自定义标签
scale_color_discrete(name=NULL,labels=c(“Core”,”Pan”))#修改图例的颜色美感,将图例名称设置为 NULL 并提供自定义标签
到这里我们这三个组合图就绘制完成了,其实原理都很简单,都是一些基础的图进行拼接和组合,小果也把代码注释关于每一个步骤的讲解都进行了注释,小伙伴下去要多多理解代码的意思,这样才能绘制出自己想要的图,好了,话不多说!快去动手试试吧!!
最后呢,小果给小伙伴带个小福利,如果小伙伴觉得自己运行代码太麻烦,可以试试我们的云生信小工具哟,里面有成熟的代码,只要输入合适的数据就可以直接出想要的图呢。这是我们的网址http://www.biocloudservice.com/home.html
多多关注我们公众号,一来学生信!