ggplot绘制韦恩图-添加文字/图片注释

之前有小伙伴咨询了一个韦恩图,其实韦恩图很简单,很多在线工具,代码的话不论是R还是python都有各种各样的包或者方法实现作图。但是他的需求是如何指示文字,一般的方法当然是使用AI很方便,但是代码可不可以实现呢?答案是肯定的!这里我们介绍一下使用ggveen/ggplot实现韦恩图的做法,并添加指示文字!参考:
https://www.bilibili.com/video/BV1TC4y1N7b2/?spm_id_from=333.999.0.0&vd_source=05b5479545ba945a8f5d7b2e7160ea34
首先我们构建一个差异基因分析,用来做韦恩图:

celltype_DEGs <- list()
cells <- c("UEC", "CEC")
for (i in 1:2) {
  
  data = subset(sce, celltype==cells[i])
  df <- FindMarkers(data,
                    group.by="orig.ident",
                    ident.1="AEH",
                    ident.2="HC",
                    logfc.threshold = 0.4,
                    min.pct = 0.4)
  celltype_DEGs[[i]] <- df
}

# adjust p 显著
for(i in seq_along(celltype_DEGs)){
  
  celltype_DEGs[[i]] <- celltype_DEGs[[i]][which(celltype_DEGs[[i]]$p_val_adj<=0.05),]
}

我们直接使用ggvenn作图:


library(ggvenn)
library(tidyverse)
library(ggtext)


Venn_list <- list(UEC=rownames(celltype_DEGs[[1]]),
                  CEC=rownames(celltype_DEGs[[2]]))
#使用list_to_data_frame将list转化为data.frame
data_veen = list_to_data_frame(Venn_list)

#鉴定集合基因
Common_gene <- data_veen[which(data_veen$`UEC`=="TRUE" & data_veen$`CEC`=="TRUE"),]
UEC_gene <- data_veen[which(data_veen$`UEC`=="TRUE" & data_veen$`CEC`=="FALSE"),]
CEC_gene <- data_veen[which(data_veen$`UEC`=="FALSE" & data_veen$`CEC`=="TRUE"),]
#保存文件
write.csv(Common_gene, file = "Common_gene.csv")
write.csv(UEC_gene, file = "UEC_gene.csv")
write.csv(CEC_gene, file = "CEC_gene.csv")


#method1,用list数据、ggvenn作图
ggvenn(Venn_list,
       show_percentage = T,
       show_elements = F,
       text_size=3,
       digits = 1,
       auto_scale =T,
       set_name_size=4,
       stroke_color = "grey30",
       fill_color = c("#FF8C00","#4DAF4A"),
       set_name_color = c("#FF8C00","#4DAF4A"))+
  geom_segment(aes(x = 0.2, y = -0.2,xend = 0.2,yend = -0.8),
             arrow = arrow(length = unit(0.07, "inch")),size = 1,
             color = "grey30")+
  geom_text(aes(0.2, -1, label = "ASTL GCLC\nIGFBP4 PDE4C\nMMP7 TRH"),
            hjust = -0.2, vjust =0, fontface="italic")+
  geom_curve(aes(x = -1, y = 0,xend = -0.5,yend = 1.8),
           arrow = arrow(length = unit(0.1, "inch")),size = 1,
           color = "grey30", curvature = -0.4)+
  geom_text(aes(-0.5, 2, label = "SYT14 MUC16\nPCDH7 HPN\nITGA6 CXCL3"),
            hjust = -0.1, vjust =1, fontface="italic")+
  geom_curve(aes(x = 1, y = 0,xend = 0.5,yend = 1),
             arrow = arrow(length = unit(0.1, "inch")),size = 1,
             color = "grey30", curvature = 0.2)+
  geom_text(aes(0.5, 1, label = "CASC9 SFTA2\nCOL1A1 SPARC"),
            hjust = 1, vjust =-0.1, fontface="italic")

使用ggplot,geom_veen作图:

p = ggplot(data_veen, aes(A = `UEC`, B = `CEC`)) +
  geom_venn(auto_scale =T,
            set_name_size=4,
            fill_color = c("#BCCC35","#5DBBA1"),
            set_name_color = c("#BCCC35","#5DBBA1")) + 
  theme_void() + 
  coord_fixed()+
  geom_segment(aes(x = 0.2, y = -0.2,xend = 0.2,yend = -1),
               arrow = arrow(length = unit(0.07, "inch")),size = 1,
               color = "grey30")+
  geom_text(aes(0.2, -1.2, label = "ASTL GCLC\nIGFBP4 PDE4C\nMMP7 TRH"),
            hjust = 0.5, vjust =1, fontface="italic")+
  geom_curve(aes(x = -1, y = 0,xend = -0.5,yend = 1.8),
             arrow = arrow(length = unit(0.1, "inch")),size = 1,
             color = "grey30", curvature = -0.4)+
  geom_text(aes(-0.5, 2, label = "SYT14 MUC16\nPCDH7 HPN\nITGA6 CXCL3"),
            hjust = -0.1, vjust =1, fontface="italic", color="#BCCC35")+
  geom_curve(aes(x = 1, y = 0,xend = 1.2,yend = 1),
             arrow = arrow(length = unit(0.1, "inch")),size = 1,
             color = "grey30", curvature = 0.2)+
  geom_text(aes(1.2, 1, label = "CASC9 SFTA2\nCOL1A1 SPARC"),
            hjust = -0.1, vjust =1, fontface="italic", color="#5DBBA1")


最后,我们还以添加矢量图表示不同的样本:简笔画网站:
http://phylopic.org/image/browse/

#读入图片
library(grid)
library(png)
library(RCurl)


rayur1 = "https://images.phylopic.org/images/9fae30cd-fb59-4a81-a39c-e1826a35f612/raster/187x512.png"
raylogo1 = readPNG(getURLContent(rayur1), native = T)
im1 <- rasterGrob(raylogo1, interpolate=TRUE)


rayur2 = "https://images.phylopic.org/images/acf1cbec-f6ef-4a82-8ab5-be2f963b93f5/raster/192x512.png"
raylogo2 = readPNG(getURLContent(rayur2), native = T)
im2 <- rasterGrob(raylogo2, interpolate=TRUE)


p+
  annotation_custom(im1, xmin=-1.8, xmax=-1.3, ymin=-0.5, ymax=0.5)+
  annotation_custom(im2, xmin=1.1, xmax=1.6, ymin=-0.5, ymax=0.5)


今天的内容就分享到这里了,希望对你有用,点个赞在走呗!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容