首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Science杂志同款:高颜值韦恩图绘制细节调整

Science杂志同款:高颜值韦恩图绘制细节调整

作者头像
生信技能树
发布2025-07-16 14:47:29
发布2025-07-16 14:47:29
21600
代码可运行
举报
文章被收录于专栏:生信技能树生信技能树
运行总次数:0
代码可运行

自从我们的专辑《绘图小技巧2025》开始以来,已经分享了非常多好看的图啦,直到昨天有个学员问题,没有韦恩图吗?那必须得有啊,马上更新上!今天就来画一下~

我找了一篇大家应该很熟悉的顶刊杂志文献,这个文献里面的图我们已经绘制了非常多啦,今天就画里面的韦恩图, 来自 2024 年 6 月份发表在 顶刊 science 杂志上的文献《Defining the KRAS- and ERK-dependent transcriptome in KRAS-mutant cancers》:

两个横着的,图注:

(B) Venn diagram indicates the overlap of differentially expressed genes (with unique Entrez gene IDs) upon KRAS siRNA treatment (refer to blue/red shading in (A)) compared to Hallmark KRAS signaling genes. N = 8 (cell lines as biological replicates) for each treatment and control.

还有三个交集的:

且这几个图的配色都很好看!

这个图不是很好绘制的地方在于韦恩图两边的文字标签 与 圈的距离,以及显示完全的问题!

这里我们借助 VennDiagram 包绘制,以及 grid 包调整 和 拼图!绘制2个圈的,3个圈的大家可以实践看看~

读取数据

数据的详细背景见:Science杂志:比火山图多一点信息的火山图

先读取差异基因

代码语言:javascript
代码运行次数:0
运行
复制
###
### Create: juan zhang
### Date:   2025-01-16
### Email:  492482942@qq.com
### Blog:   http://www.bio-info-trainee.com/
### Forum:  http://www.biotrainee.com/thread-1376-1-1.html
### Update Log: 2025-01-16   First version 
### 

rm(list=ls())
# 加载R包
library(ggplot2)
library(tibble)
library(ggrepel)
library(tidyverse)
library(dplyr)
library(patchwork)
library(ggplot2)

##### 01、加载数据
# 加载:KRAS vs NS siRNA(log2FC)
diff <- read.csv("./data/science.adk0775_data_s1.csv" )
head(diff)

# 提取基因ID,基因Symbol,FDR值和FC值
diff <- diff[,c("X","external_gene_name","logFC","FDR" )]

# 增加一列上下调,阈值 log2FC > 0.5, adj. p < 0.05
diff$g <- "normal"
diff$g[diff$logFC >0.5 & diff$FDR < 0.05 ] <- "up"
diff$g[diff$logFC < -0.5 & diff$FDR < 0.05 ] <- "down"
table(diff$g)
# down normal     up 
# 677  13071   1051 

# 显著差异基因
diff_up <- diff[diff$g=="up", ]
diff_down <- diff[diff$g=="down", ]

两个 Hallmark基因集

去 GSEA 的 MSigDB 数据库去下载Hallmark基因集 gmt 格式:https://www.gsea-msigdb.org/gsea/msigdb/download_file.jsp?filePath=/msigdb/release/2024.1.Hs/h.all.v2024.1.Hs.symbols.gmt

代码语言:javascript
代码运行次数:0
运行
复制
# 读取 hallmark基因集
library(clusterProfiler)
geneset <- read.gmt("data/h.all.v2024.1.Hs.symbols.gmt")
HALLMARK_KRAS_SIGNALING_DN <- geneset[geneset$term=="HALLMARK_KRAS_SIGNALING_DN", 2]
HALLMARK_KRAS_SIGNALING_UP <- geneset[geneset$term=="HALLMARK_KRAS_SIGNALING_UP", 2]
HALLMARK_KRAS_SIGNALING_UP
HALLMARK_KRAS_SIGNALING_DN

绘图

图B上面的韦恩图:

代码语言:javascript
代码运行次数:0
运行
复制
## 两个交集
library(VennDiagram)

## 图1
gene_list <- list(UP = diff_down$external_gene_name, Hallmark_UP = HALLMARK_KRAS_SIGNALING_UP)
p1 <- venn.diagram(
  x = gene_list, # 向量集合
  scaled = F, # 根据比例显示大小
  category.names = c("PDAC KRAS\nDependent UP\n(676)" , "Hallmark KRAS\nSignaling UP\n(200)"),
  fill = c("#6e48fb", "#ffa500"), 
  cat.col = c("#6e48fb", "#ffa500" ),  # 设置类别标签的颜色
  alpha=0.5,  # 着色透明度
  col="black",
  output = FALSE ,
  disable.logging = F,
  lwd = 1.3, # 外圈的颜色和粗细
  lty = 1,
  cex = 1.5, # 圈内字体大小
  cat.cex = 1.3, # 外圈标签字体大小
  cat.default.pos = "outer",
  cat.dist = 0.15,        # 圈的半径
  cat.pos = c(-90, 90),  # 调整标签位置,顺时钟360度
  output=F,
  filename=NULL,
  imagetype="pdf" ,
  height = 180 , 
  width = 180 , 
  resolution = 200,
  margin  = 0.25 # 圈外标签与图形边距的距离
)

grid.newpage()
grid.draw(p1)
图片
图片

第二个韦恩图:

代码语言:javascript
代码运行次数:0
运行
复制
## 图2
gene_list <- list(UP = diff_up$external_gene_name, Hallmark_DOWN = HALLMARK_KRAS_SIGNALING_DN)
p2 <- venn.diagram(
  x = gene_list, # 向量集合
  scaled = F, # 根据比例显示大小
  category.names = c("PDAC KRAS\nInhibited DN\n(1044)" , "Hallmark KRAS\nSignaling DN\n(200)"),
  fill = c("#ff7d82", "#7f7f7f"), 
  cat.col = c("#ff7d82", "#7f7f7f"),   # 设置类别标签的颜色
  alpha=0.5,  # 着色透明度
  col="black",
  output = FALSE ,
  disable.logging = F,
  lwd = 1.3, # 外圈的颜色和粗细
  lty = 1,
  cex = 1.5, # 圈内字体大小
  cat.cex = 1.3, # 外圈标签字体大小
  cat.default.pos = "outer",
  cat.dist = 0.15,        # 圈的半径
  cat.pos = c(-90, 90),  # 调整标签位置,顺时钟360度
  output=F,
  filename=NULL,
  imagetype="pdf" ,
  height = 180 , 
  width = 180 , 
  resolution = 200,
  margin  = 0.25 # 圈外标签与图形边距的距离
)
grid.newpage()
grid.draw(p2)
图片
图片

将两个图保存在一起:

这里用到了视图窗口

代码语言:javascript
代码运行次数:0
运行
复制
# 加载 grid 包
library(grid)

# 保存两个图在一个pdf上
pdf(file = "Fig1B_Venn.pdf", width = 6, height = 6)
grid.newpage()
# 创建一个新的视图窗口,增加边距
# x,y指定绘图的位置,0.5,0.5绘制在视图的中心位置
# width = 0.6, height = 0.6 表示绘图的高和宽,都是以1为单位
vp <- viewport(x = 0.5, y = 0.75, width = 1, height = 1, just = c("center", "center"))
pushViewport(vp)
grid.draw(p1)
vp <- viewport(x = 0.5, y = 0.15, width = 1, height = 1, just = c("center", "center"))
pushViewport(vp)
grid.draw(p2)
dev.off()

结果如下:

完美~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-07-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信技能树 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 读取数据
    • 先读取差异基因
    • 两个 Hallmark基因集
  • 绘图
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档