跟着 Cell 学作图 | 桑葚图(ggalluvial)

简介: 跟着 Cell 学作图 | 桑葚图(ggalluvial)

读图image.png

image.png

image-20220426142813997

来看一下这个摘要图(红色箭头),作者用堆叠条形图来展示两组样本间比例的变化,中间又增加了连线让相同组分之间对对比更加的直观。一般这种数据就是以饼图或是堆叠条形图来展现,今天我们就用饼图和条形图两种形式都来复现一下。


复现结果

image.png

桑葚图


开始绘制


饼图


数据是三组样本蛋白质的亚细胞定位数据,一般的可视化方法就会用饼图来展示,饼图十分常见而且制作特别简单,大部分情况用excel或origin等软件都可以快速制作,所以在R中的相关函数很少。这里我们用到了tastypie包,其中的pie_bake函数生成一个ggplot对象可以非常方便的调整你的饼图。

# 加载包及导入数据
library(ggplot2)
library(ggthemes)
library(tidyverse)
library(ggalluvial)
library(ggsci)
library(cowplot)
library(tastypie)
rm(list = ls())
df=read.csv('Sublocation.csv',header = T)
head(df)
p1=pie_bake(data = data.frame(subloc=df$Subcellar.location,ratio=df$A),
           template = "blue1",#调色盘是必要参数,不影响手动添加颜色
           perc = TRUE,#显示百分比
           group_name = "a",
           title ='A')+
  theme_classic()+
  scale_fill_npg()+#ggsci中的调色盘
  theme(panel.background = element_blank(),
        axis.line.x = element_blank(),
        axis.line.y = element_blank(),
        axis.title.y = element_blank(),
        axis.title.x = element_blank(),
        axis.text.x = element_blank(),
        axis.text.y = element_blank(),
        axis.ticks.x = element_blank(),
        axis.ticks.y = element_blank(),
        legend.title = element_text(),
        plot.title = element_text(hjust = 0.5,vjust=-2,size = 15))+labs(fill = 'Subcellular location')
p2=pie_bake(data = data.frame(subloc=df$Subcellar.location,ratio=df$C),
         template = "blue1",
         perc = TRUE,
         group_name = "a",
         title ='C')+
  theme_classic()+scale_fill_npg()+
  theme(panel.background = element_blank(),
        axis.line.x = element_blank(),
        axis.line.y = element_blank(),
        axis.title.y = element_blank(),
        axis.title.x = element_blank(),
        axis.text.x = element_blank(),
        axis.text.y = element_blank(),
        axis.ticks.x = element_blank(),
        axis.ticks.y = element_blank(),
        legend.title = element_text(),
        plot.title = element_text(hjust = 0.5,vjust=-2,size = 15))+labs(fill = 'Subcellular location')
p3=pie_bake(data = data.frame(subloc=df$Subcellar.location,ratio=df$B),
         template = "blue1",
         perc = TRUE,
         group_name = "a",
         title ='B')+
  theme_classic()+scale_fill_npg()+
  theme(panel.background = element_blank(),
        axis.line.x = element_blank(),
        axis.line.y = element_blank(),
        axis.title.y = element_blank(),
        axis.title.x = element_blank(),
        axis.text.x = element_blank(),
        axis.text.y = element_blank(),
        axis.ticks.x = element_blank(),
        axis.ticks.y = element_blank(),
        legend.title = element_text(),
        plot.title = element_text(hjust = 0.5,vjust=-2,size = 15))+
  labs(fill = 'Subcellular location')
plot_grid(p1,p2,p3)

在R中制作饼图也是十分的简单,但当多组进行比较的时候多个饼图的对比就没那么直观了,这时候我们就需要做堆叠条形图。


image.png

pie


堆叠条形图


首先对数据进行前处理做成适合ggplot作图的数据格式,把宽表转换为长表,创建一列组成比例用于后面分割图形。

mdf=df%>%
  pivot_longer(-Subcellar.location,names_to = 'Sample',values_to = 'Value')%>%
  group_by(Sample)%>%
  mutate(Proportion=Value/sum(Value))

geom_bar或是geom_col可以很轻松的做出堆叠条形图。

ggplot(mdf, aes(x = Sample,y=Proportion,fill = Subcellar.location)) +
  geom_col(width = 0.4)+
  theme_base()

image.png

barplot

但为了复现文章中原图的格式,我们调用ggalluvial包中的geom_alluvium或是geom_flow函数来制作桑葚图(冲击图),后面我们会专门对桑葚图(冲击图)进行讲解,这里作为实战应用简单讲解。


g=ggplot(mdf, aes(x = Sample,y=Proportion,fill = Subcellar.location, 
                stratum = Subcellar.location, alluvium = Subcellar.location)) +
  geom_col(width = 0.4,color=NA)+
  geom_flow(width = 0.4,alpha = 0.2,knot.pos = 0)   +#knot.pos可以使连线更直
  #geom_alluvium( width = 0.4,alpha = 0.2,knot.pos = 0)+ 与geom_flow效果相似
  scale_fill_manual(values = pal_npg()(4))+
  theme_map()+
  theme(axis.text.x=element_text(size=20,vjust = 5),
        legend.position = 'none')
g

image.png


桑葚图


原图复现

大体结构已经做出来了,后面就是添加一些连线,强烈建议在AI中修改,只需要几分钟就可以修改好,在R中有几种实现的方法,但总的来说都比较麻烦这里介绍一种,有朋友有好的实现思路也可以在后台留言。一种实现方法就是计算出各节点的坐标然后用geom_segment添加白色线段。


相关文章
|
定位技术 数据库 知识图谱
Google Earth Engine(GEE)——土壤网格250m v2.0
Google Earth Engine(GEE)——土壤网格250m v2.0
1134 0
|
1月前
|
人工智能 自然语言处理 网络安全
零基础轻松上手 OpenClaw Skill:阿里云及本地部署图文流程+报错处理保姆教程
很多技术小白想上手OpenClaw Skill,却卡在安装环节——报错、配置复杂、不知道如何触发技能,最终半途而废。但实际上,OpenClaw Skill的使用核心在于“敢尝试+善用AI自我纠错”,哪怕全程看不懂报错,一路确认让AI自主修复,也能成功跑通。本文将完整拆解2026年OpenClaw的阿里云部署与本地部署步骤,带来保姆级Skill安装、使用、报错解决攻略,包含可直接复制的代码命令,助力小白零门槛解锁Skill功能,从安装到生成成品一气呵成。
323 1
|
编解码 数据可视化 Java
三维基因组: TAD差异分析-HiCCUPS (2)
三维基因组: TAD差异分析-HiCCUPS (2)
1072 17
三维基因组: TAD差异分析-HiCCUPS (2)
|
7月前
|
机器学习/深度学习 编解码 运维
MATLAB高阶谱分析工具箱(HOSA)解析
MATLAB高阶谱分析工具箱(HOSA)解析
|
数据可视化 数据处理
CUT&Tag 数据处理和分析教程(8)
CUT&Tag 数据处理和分析教程(8)
1006 12
|
机器学习/深度学习 数据挖掘 vr&ar
R语言时间序列:ARIMA / GARCH模型的交易策略在外汇市场预测应用
R语言时间序列:ARIMA / GARCH模型的交易策略在外汇市场预测应用
|
存储 编解码 数据可视化
Visium HD空间数据分析、可视化以及整合 (1)
【8月更文挑战第1天】Visium HD空间数据分析、可视化以及整合 (1)
Visium HD空间数据分析、可视化以及整合 (1)
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用
【10月更文挑战第7天】本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,通过 Spring Initializr 创建 Spring Boot 项目并配置 Spring Security。接着,实现后端 API 以提供菜单数据。在前端部分,使用 Ant Design Pro Vue 脚手架创建项目,并配置动态路由和菜单。最后,启动前后端服务,实现高效、美观且功能强大的应用框架。
480 2
|
存储 算法 C语言
数据结构学习记录——图-最短路径问题(无权图单源最短路径算法、有权图单源最短路径算法、多源最短路径算法、Dijkstra(迪杰斯特拉)算法、Floyd算法)
数据结构学习记录——图-最短路径问题(无权图单源最短路径算法、有权图单源最短路径算法、多源最短路径算法、Dijkstra(迪杰斯特拉)算法、Floyd算法)
1324 1
|
存储 编解码 数据可视化
单细胞空间|在Seurat中对基于图像的空间数据进行分析(1)
单细胞空间|在Seurat中对基于图像的空间数据进行分析(1)