【TOP生物信息】CNS图表复现,单细胞marker基因展示的另一种方式——蜂巢图

news2024/11/27 20:33:19

扫码关注下方公粽号,回复推文合集,获取400页单细胞学习资源!

在这里插入图片描述

本文共计1359字,阅读大约需要4分钟。

Sten Linnarsson大神的单细胞绘图堪称极致美学,在这里,小编选择了发表在nature上展示marker基因的绘图进行复现。

图片

本文目录如下:

  • 准备数据
  • 常规小提琴图展示
  • 使用geom_beeswarm()绘制
  • 使用geom_quasirandom()绘制
  • 更换配色
  • 更换主题
  • 获取代码和数据
  • 参考
  • 往期回顾

准备数据

首先处理单细胞数据为ggplot2绘图所需格式,准备的数据包括marker基因名(gene),单个细胞编号名(CB),细胞分群命名(celltype),基因表达量(exp)作为输入数据,进行melt转换后得到如下展示的数据表(vln.df)

library(tidyverse)
library(ggplot2)
library(ggbeeswarm)
library(scales)
library(reshape2)
vln.df <- read.csv(file = 'vln.df.0319.csv',row.names = 1)
vln.df$gene = factor(
  vln.df$gene,
  levels = c(
    "Krt18","Krt14","Mbp","Cd34","Pdgfra","Cldn5","Pecam1","Acta2","Myh11","Ly6g",
    "S100a8","Kit","Ms4a2","Mki67","Stmn1","Lyz2","Retnla","Cd74","Cd83","Jchain",
    "Mzb1","Cd19","Cd79a","Cd3d","Cd3g","Klrd1","Nkg7"
  )
)
head(vln.df)

> head(vln.df)
    gene                     CB       exp celltype
1  Krt18 Brep4_TAGACTGCACTTGGGC 0.7077087   cell_B
2  Krt14 Brep4_TAGACTGCACTTGGGC 3.2859138   cell_B
3    Mbp Brep4_TAGACTGCACTTGGGC 0.0000000   cell_B
4   Cd34 Brep4_TAGACTGCACTTGGGC 0.0000000   cell_B
5 Pdgfra Brep4_TAGACTGCACTTGGGC 0.0000000   cell_B
6  Cldn5 Brep4_TAGACTGCACTTGGGC 0.0000000   cell_B

从上图观察发现,作者并没有用传统的dotplot或者violinplot进行marker基因展示,而像是用散点图绘制而来,因此我们尝试是否可以在小提琴图的基础上进行改进。

常规小提琴图展示

先看一下小提琴图的展示效果

p1 <- vln.df%>%ggplot(aes(celltype,exp),color=factor(celltype))+
  geom_violin(aes(fill=celltype),scale = "width")+ 
  facet_grid(gene~.,scales = "free_y")+
  scale_y_continuous(expand = c(0,0))+
  theme_bw()+
  theme(
    panel.grid = element_blank(),
    
    axis.title.x.bottom = element_blank(),
    axis.ticks.x.bottom = element_blank(),
    axis.text.x.bottom = element_text(angle = 45,hjust = 1,vjust = NULL,color = "black",size = 14),
    axis.title.y.left = element_blank(),
    axis.ticks.y.left = element_blank(),
    axis.text.y.left = element_blank(),
    
    legend.position = "none",
    
    panel.spacing.y = unit(0, "cm"),
    strip.text.y = element_text(angle=0,size = 14,hjust = 0),
    strip.background.y = element_blank()
  )
p1
ggsave("图01.png",width = 12,height = 20,units = "cm")

图片

使用geom_beeswarm()绘制

通过一番搜寻发现,可以用ggbeeswarm包绘制散点图,ggbeeswarm提供了两种使用ggplot2创建蜂群图的方法。一个是geom_beeswarm(),另一个是geom_quasirandom(),我们分别进行尝试

首先使用geom_beeswarm()试一试。注意!散点图的绘制会比较慢,需要等待一段时间

p2 <- vln.df%>%ggplot(aes(celltype,exp,color=factor(celltype)))+
  geom_beeswarm(cex = 0.1)+  #用蜂巢图替代小提琴图
  facet_grid(gene~.,scales = "free_y")+
  scale_y_continuous(expand = c(0,0))+
  theme_bw()+
  theme(
    panel.grid = element_blank(),
    
    axis.title.x.bottom = element_blank(),
    axis.ticks.x.bottom = element_blank(),
    axis.text.x.bottom = element_text(angle = 45,hjust = 1,vjust = NULL,color = "black",size = 14),
    axis.title.y.left = element_blank(),
    axis.ticks.y.left = element_blank(),
    axis.text.y.left = element_blank(),
    
    legend.position = "none",
    
    panel.spacing.y = unit(0, "cm"),
    strip.text.y = element_text(angle=0,size = 14,hjust = 0),
    strip.background.y = element_blank()
  )
ggsave("图02.pdf",plot = p2,width = 12,height = 20,units = "cm")
p2=ggrastr::rasterise(p2, dpi = 300)#得到的图太大使用ggrastr包降低分辨率进行保存
ggsave("图02b.pdf",plot = p2,width = 12,height = 20,units = "cm")

这里有一个小技巧:单细胞的点非常多,直接保存文件很大,可以使用ggrastr::rasterise()降低分辨率进行保存。

图片

图片效果并不好,原因是ggbeeswarm会横向展开所有点。单细胞数据点太多,图片装不下,point往两边无限展开,字就往中间挤。

所有点少的时候可以用ggbeeswarm这个函数画蜂巢图。

使用geom_quasirandom()绘制

我们来看看另一个函数geom_quasirandom,当点很多的时候,该函数可以处理过度绘图(overplotting)的问题。

p3 <- vln.df%>%ggplot(aes(celltype,exp,color=factor(celltype)))+
  geom_quasirandom(size=0.02,method = "smiley")+ #设置散点大小,因为单细胞测序数量很多,点可以尽量小一点,否则看不出效果
  facet_grid(gene~.,scales = "free_y")+
  scale_y_continuous(expand = c(0,0))+
  theme_bw()+
  theme(
    panel.grid = element_blank(),
    
    axis.title.x.bottom = element_blank(),
    axis.ticks.x.bottom = element_blank(),
    axis.text.x.bottom = element_text(angle = 45,hjust = 1,vjust = NULL,color = "black",size = 14),
    axis.title.y.left = element_blank(),
    axis.ticks.y.left = element_blank(),
    axis.text.y.left = element_blank(),
    
    legend.position = "none",
    
    panel.spacing.y = unit(0, "cm"),
    strip.text.y = element_text(angle=0,size = 14,hjust = 0),
    strip.background.y = element_blank()
  )
ggsave("图03.pdf",plot = p3,width = 12,height = 20,units = "cm")

图片

与原图有些接近了,下一步修改颜色,原图采用了单一的红色配色,表达量用透明度进行区分,这里我们采用黄蓝渐变的配色方案,如果不会配色可以问chatGPT哒

更换配色

my_colors <- colorRampPalette(c("#1A5276", "#F7DC6F"))(15)

p4 <- vln.df%>%ggplot(aes(celltype,exp,color=factor(celltype),alpha=abs(exp)))+ #用透明度映射基因表达量
  geom_quasirandom(size=0.02,method = "smiley")+
  facet_grid(gene~.,scales = "free_y")+
  scale_y_continuous(expand = c(0,0))+
  scale_color_manual(values = my_colors)+ #给每个celltype添加颜色
  theme_bw()+
  theme(
    panel.grid = element_blank(),

    axis.title.x.bottom = element_blank(),
    axis.ticks.x.bottom = element_blank(),
    axis.text.x.bottom = element_text(angle = 90,hjust = 1,vjust = 0.5,color = "black",size = 14),
    axis.title.y.left = element_blank(),
    axis.ticks.y.left = element_blank(), 
    axis.text.y.left = element_blank(),
    
    legend.position = "none",
    
    panel.spacing.y = unit(0, "cm"),
    strip.text.y = element_text(angle=180,size = 14,hjust = 1),
    strip.background.y = element_blank()
  )
ggsave("图04.pdf",plot = p4,width = 12,height = 20,units = "cm")

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PVitPKU1-1684650313266)(data:image/svg+xml,%3C%3Fxml version=‘1.0’ encoding=‘UTF-8’%3F%3E%3Csvg width=‘1px’ height=‘1px’ viewBox=‘0 0 1 1’ version=‘1.1’ xmlns=‘http://www.w3.org/2000/svg’ xmlns:xlink=‘http://www.w3.org/1999/xlink’%3E%3Ctitle%3E%3C/title%3E%3Cg stroke=‘none’ stroke-width=‘1’ fill=‘none’ fill-rule=‘evenodd’ fill-opacity=‘0’%3E%3Cg transform=‘translate(-249.000000, -126.000000)]’ fill=‘%23FFFFFF’%3E%3Crect x=‘249’ y=‘126’ width=‘1’ height=‘1’%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)

更换主题

最后,更换theme去掉分面网格线,就得到美美的图啦~

p5 <- vln.df%>%ggplot(aes(celltype,exp,color=factor(celltype),alpha=abs(exp)))+
  geom_quasirandom(size=0.02,method = "smiley")+
  facet_grid(gene~.,scales = "free_y")+
  scale_y_continuous(expand = c(0,0))+
  scale_color_manual(values = my_colors)+
  theme_classic()+ #更换theme主题
  theme(
    axis.title.x.bottom = element_blank(),
    #axis.ticks.x.bottom = element_blank(),#添加刻度
    axis.text.x.bottom = element_text(angle = 90,hjust = 1,vjust = 0.5,color = "black",size = 14),
    axis.title.y.left = element_blank(),
    axis.ticks.y.left = element_blank(),
    axis.text.y.left = element_blank(),
    
    legend.position = "none",
    
    panel.spacing.y = unit(0, "cm"),
    strip.text.y = element_text(angle=180,size = 14,hjust = 1),
    strip.background.y = element_blank()
  )
ggsave("图05.pdf",plot = p5,width = 12,height = 20,units = "cm")

图片

需要注意的是,细胞量太大会导致散点图看起来不明显,因此该绘图方法更适合细胞数量较少的单细胞marker基因展示

获取代码和数据

代码和测试数据请关注公粽号获取

在这里插入图片描述

参考

原图来自文献:Molecular architecture of the developing mouse brain

绘图代码参考:

https://r-charts.com/distribution/ggbeeswarm/ https://github.com/eclarke/ggbeeswarm


往期回顾

01.marker展示_聚类和热图组合

图片01.marker展示_聚类和热图组合

02.marker展示_堆叠小提琴图

图片02.marker展示_堆叠小提琴图

03.两组比较_差异基因数目展示

图片03.两组比较_差异基因数目展示

04.两组比较_差异基因展示

图片04.两组比较_差异基因展示

05.两组比较_基因集分数添加显著性

图片05.两组比较_基因集分数添加显著性

06.feature展示

图片06.feature展示

07.KEGG富集柱形图,并添加通路注释信息

图片07.KEGG富集结果展示

08.细胞通讯_两组比较_气泡图

图片08.细胞通讯_两组比较_气泡图

09.细胞通讯_两组比较_连线图

图片09.细胞通讯_两组比较_连线图

10.KEGG富集结果的圆圈图

图片10.KEGG富集结果的圆圈图

11.marker展示_分组气泡图

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/551128.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

找不到msvcp140.dll无法继续执行代码,怎么解决?

MSVCP140.dll是一个Windows操作系统中的动态链接库文件&#xff0c;它是Microsoft Visual C Redistributable for Visual Studio 2015的一部分。这些库提供了一些C程序所需的基本功能&#xff0c;例如内存管理、文件操作、字符串处理等等。丢失或者损坏会导致很多软件跟游戏无法…

由浅入深Netty简易实现RPC框架

目录 1 准备工作2 服务器 handler3 客户端代码第一版4 客户端 handler 第一版5 客户端代码 第二版6 客户端 handler 第二版 1 准备工作 这些代码可以认为是现成的&#xff0c;无需从头编写练习 为了简化起见&#xff0c;在原来聊天项目的基础上新增 Rpc 请求和响应消息 Data …

由浅入深Netty代码调优

目录 1. 优化1.1 扩展序列化算法 2 参数调优2.1 CONNECT_TIMEOUT_MILLIS2.2 SO_BACKLOG2.3 ulimit -n2.4 TCP_NODELAY2.5 SO_SNDBUF & SO_RCVBUF2.6 ALLOCATOR2.7 RCVBUF_ALLOCATOR 1. 优化 1.1 扩展序列化算法 序列化&#xff0c;反序列化主要用在消息正文的转换上 序列…

Windows11部署WSL2以及迁移操作系统位置

1 缘起 笔记本电脑Windows 10内存紧张&#xff1a;16 G&#xff0c; 但是&#xff0c;开发需要一些组件&#xff0c;如Redis&#xff08;Redisearch、ReJson&#xff09;、MySQL等&#xff0c; 在Linux容器化中部署更方便&#xff0c;易用&#xff0c; 在Windows中通过虚拟机安…

安卓与串口通信-modbus篇

前言 在之前的两篇文章中&#xff0c;我们讲解了串口的基础知识和在安卓中使用串口通信的方法&#xff0c;如果还没看过之前文章的同学们&#xff0c;建议先看一遍&#xff0c;不然可能会不理解这篇文章讲的某些内容。 事实上&#xff0c;在实际应用中&#xff0c;我们很少会…

Tip in/Out变速箱齿轮敲击过程详细分析

Tip in/Out变速箱齿轮敲击过程详细分析(模型由AMEsim例子改造而成&#xff0c;数据均虚构&#xff0c;仅学习用&#xff09; 1、发动机稳态工况2、Tip in/Out工况3、总结 1、发动机稳态工况 发动机输出力矩&#xff1a; 一轴齿轮驱动力矩&#xff08;离合器减振器输出力矩&am…

为什么要做问卷调查?企业获得用户心声的捷径

问卷调查作为一种重要的数据收集方法&#xff0c;在市场营销、社会学研究、用户研究等领域得到广泛应用。通过问卷调查&#xff0c;我们可以了解受访者的态度、行为、需求等信息&#xff0c;进而为企业和组织的决策提供支持。那么&#xff0c;为什么要做问卷调查呢&#xff1f;…

大语言模型架构设计

【大模型慢学】GPT起源以及GPT系列采用Decoder-only架构的原因探讨 - 知乎本文回顾GPT系列模型的起源论文并补充相关内容&#xff0c;中间主要篇幅分析讨论为何GPT系列从始至终选择采用Decoder-only架构。 本文首发于微信公众号&#xff0c;欢迎关注&#xff1a;AI推公式最近Ch…

一些云原生开源安全工具介绍

本博客地址&#xff1a;https://security.blog.csdn.net/article/details/130789465 一、Kubernetes安全监测工具kube-bench kube-bench是一个用Golang开发的、由Aqua Security发布的自动化Kubernetes基准测试工具&#xff0c;它运行CIS Kubernetes基准中的测试项目。这些测试…

在 uniapp 中通过 Intent 的方式启动其他APP并且传参

文章目录 前言一、其他软件调用文档中的安卓原生代码二、在uniAPP中实现上述方式三、总结四、感谢 前言 由于业务需求需要&#xff0c;我方研发的安卓APP需要调用其他安卓APP&#xff0c;并且将保存返回的文件存储路径进行读取后操作。对方软件公司提供了对接文档和一个测试调…

docker安装华为gaussdb数据库

docker安装gaussdb docker镜像&#xff1a; http://docker.hub.com/ 这里我们使用docker hub镜像下载&#xff0c;该镜像下载较慢&#xff0c;可能有时访问不同&#xff0c;可以使用阿里云镜像下载&#xff0c;阿里云镜像配置参考《docker国内阿里云镜像加速》 拉取镜像 下载…

程序翻译的过程,linux环境下处理,生成 .i、.s、.o 文件(预处理、编译、汇编、链接)

1. 程序翻译的过程有四个步骤&#xff0c;预处理->编译->汇编->链接。 那么每个步骤是干什么&#xff1f; 预处理阶段&#xff1a;处理-> 头文件、宏替换、条件编译等等&#xff0c;我用 linux 环境查看一下&#xff0c;如下&#xff1a; 首先写一个简单的 .c 文…

【iptables 防火墙设置】

目录 一、iptables概述1、netfilter/iptables 关系 二、四表五链2.1、四表:2.2、五链&#xff1a; 三、规则链之间的匹配顺序四、规则链内的匹配顺序五、iptables的安装配置5.1、安装iptables5.2、配置iptables1、常用的管理选项2、常用的参数3、常用的控制类型4、iptables语法…

ThinkPHP6 模型层的模型属性,表映射关系,以及如何在控制层中使用模型层和模型层中的简单CRUD

ThinkPHP6 模型层的模型属性&#xff0c;表映射关系&#xff0c;以及模型层的CRUD及如何在控制层中使用模型层 1. model 模型层的默认映射规则 模型&#xff0c;即mvc模式中的model层&#xff0c;model层用来对接数据库&#xff0c;操作数据库的增删改查。 在tp6中&#xff…

springboot整合sharding-jdbc实现分库分表详解

目录 一、为什么需要分库分表 1.1 分库分表的优势 二、分库分表基本概念 2.1 垂直分表 2.2 水平分表 2.3 垂直分库 2.4 水平分库 三、分库分表带来的问题 3.1 分布式事务问题 3.2 跨节点关联查询问题 3.3 跨节点分页、排序问题 3.4 主键避重问题 四、分库分表常用…

Java --- 云尚办公之菜单管理模块

一、菜单管理 数据库表&#xff1a; CREATE TABLE sys_menu (id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT 编号,parent_id BIGINT(20) NOT NULL DEFAULT 0 COMMENT 所属上级,name VARCHAR(20) NOT NULL DEFAULT COMMENT 名称,type TINYINT(3) NOT NULL DEFAULT 0 COMMEN…

LSTM预测汇率涨跌分析

前言 本文主要是采用lstm对汇率涨跌进行预测&#xff0c;是一个二分类的预测问题。 步骤解析 数据构造 原始数据是单变量数据 import pandas as pdfile_path r"./huilv.csv" data pd.read_csv(file_path, usecols[1],encodinggbk) data[level] -1 美元 l…

打造高效接口自动化框架,YAML测试用例封装技巧大揭秘!

目录 前言&#xff1a; 一、框架介绍 本框架包含两个部分&#xff1a; 本框架的构建目标是&#xff1a; 二、框架目录结构 三、规范YAML测试用例封装步骤 四、框架使用 五、总结 前言&#xff1a; 本文介绍了一个基于Python和PyTest的接口自动化框架封装项目实战&#…

最佳实践,高效编写Web自动化测试强制交互方法封装技巧

目录 前言&#xff1a; 一、Web自动化测试的基本原理 二、封装强制交互方法 1、输入框强制交互 2、其他强制交互 三、封装基础类方法 四、总结 前言&#xff1a; Web自动化测试是现代软件开发中必不可少的部分。Web自动化测试可以帮助测试人员快速地验证页面功能并发现潜…

Fiddler 抓包工具下载安装基本使用(详)

在做软件测试或者Bug定位的时候会用到一些抓包工具&#xff0c;当然抓包工具还要一些其他用途可以做一些API的抓取&#xff0c;那么本篇内容就来讲 Fiddler 抓包工具的下载安装以及如何来实际的应用。讲了这些可能有的读者还不知道这个"Fiddler"怎么读呢&#xff1f;…