首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >可视化—KEGG\GO分析结果气泡图美化

可视化—KEGG\GO分析结果气泡图美化

原创
作者头像
sheldor没耳朵
发布2025-05-30 14:09:19
发布2025-05-30 14:09:19
1.1K1
举报
文章被收录于专栏:R语言可视化R语言可视化

可视化—KEGG\GO分析结果气泡图美化

之前做的图比较丑,这里记录下比较好看的美化代码。没有封装函数了,改起来比较方便,随用随拿。

以小鼠基因为例

1.KEGG

代码语言:r
复制
library(org.Mm.eg.db)
library(clusterProfiler)
library(ggplot2)
library(stringr)


length(target_gene)#1078
head(target_gene)
#[1] "Mmp12"  "E2f2"   "Fhl1"   "Rec8"   "Lrrcc1" "Gpnmb" 
#ID转换
target=as.character(na.omit(AnnotationDbi::select(org.Mm.eg.db,keys = target_gene,columns = 'ENTREZID',keytype = 'SYMBOL')[,2]))
length(target)#1078
head(target)
#[1] "17381"  "242705" "14199"  "56739"  "71710"  "93695" 

## 2.3.1 KEGG----
kk <- enrichKEGG(gene = target,
                    organism = 'mmu',
                    pvalueCutoff = 0.05,
                    qvalueCutoff =0.05)
head(kk)[,1:6]
kk=DOSE::setReadable(kk, OrgDb='org.Mm.eg.db',
                        keyType='ENTREZID')#按需替换
write.csv(kk,file = "table+figure/kk_all.csv")
kk_dt <- as.data.frame(kk)
dim(kk_dt)

#去除分类为Human Diseases的
kk_dt <- kk_dt[kk_dt$category != "Human Diseases",]
kk_dt <- na.omit(kk_dt)
dim(kk_dt)#180 11

kk_dt$Description=gsub(' - Mus musculus \\(house mouse\\)',
                     '', kk_dt$Description ) 
kk_dt_top10 <- kk_dt[order(kk_dt$p.adjust), ][1:min(10, nrow(kk_dt)), ]
kk_dt_top10$GeneRatio
#绘图
dt <- kk_dt_top10
library(ggplot2)
library(stringr)
mytheme = theme(axis.text.x = element_text(hjust = 0.5,size = 20), 
                axis.text.y = element_text(size = 20), 
                axis.title.x = element_text(size = 20), 
                axis.title.y = element_text(size = 20), 
                #axis.line = element_line(size = 1),#坐标轴粗细
                plot.margin = unit(c(1,1,1,1), "cm"),#画布边缘距离上(top)、右(right)、下(bottom)、左(left) 
                plot.title = element_text(hjust = 0.5,size =  22),
                legend.title = element_text(size = 22), 
                legend.text = element_text(size = 22), 
                legend.position = "right",
                legend.background = element_rect(fill = 'transparent'))

#GeneRatio改为小数
dt$GeneRatio <- as.numeric(str_extract(dt$GeneRatio, "^[0-9]+")) /
  as.numeric(str_extract(dt$GeneRatio, "(?<=/)[0-9]+"))
dt$richFactor <- dt$Count / as.numeric(sub("/\\d+", "", dt$BgRatio))
dt2 <- dt[order(dt$GeneRatio),]
dt2$Description <- factor(dt2$Description,levels = dt2$Description)            


p_kegg <- ggplot(data = dt2, aes(x = Description, y = GeneRatio, fill = -log10(pvalue))) +
  geom_point(aes(size = Count), shape = 21, colour = "black") + # 绘制散点
  labs(
    x = NULL, 
    y = "GeneRatio", 
    title = "KEGG Enrichment", 
    fill = bquote("-"~Log[10]~"(Pvalue)"),
    size = "Gene Count"
  ) +
  scale_fill_gradientn(colours = c("#f7ca64", "#46bac2","#7e62a3")) + # 更改配色
  scale_size_continuous(range = c(4, 8)) +#散点大小范围                  
  coord_flip() + 
  theme_bw() + 
  mytheme + 
  theme(
    plot.title = element_text(hjust = 0.5, size = 18, color = "black", face = "bold"), # 标题颜色和样式
    axis.title.y = element_text(size = 20, color = "darkred"), # y轴标题颜色
    axis.title.x = element_text(size = 10, color = "darkgreen"), # x轴标题颜色
    axis.text.x = element_text(size = 12, color = "black"), # x轴标签颜色
    axis.text.y = element_text(size = 12, color = "black"), # y轴标签颜色
    legend.title = element_text(size = 10, color = "purple"), # 图例标题颜色
    legend.text = element_text(size = 10, color = "brown") # 图例标签颜色
  ) +
  scale_x_discrete(labels = function(dat) str_wrap(dat, width = 50)) # 通路名自动换行



ggsave('table+figure/kegg_all.pdf',plot = p_kegg,height = 6,width = 8)

2.GO

代码语言:r
复制
go <- enrichGO(target, OrgDb = "org.Mm.eg.db", ont="all",  
               pvalueCutoff = 0.5,
               qvalueCutoff =0.5)  
go=DOSE::setReadable(go, OrgDb='org.Mm.eg.db',keyType='ENTREZID') 

go_dt <- as.data.frame(go@result)
go_dt <- na.omit(go_dt)

# 保留p.adjust最小的前10个(可改成每组取前N个)
go_dt <- go_dt[order(go_dt$p.adjust), ]
go_dt$GeneRatio <- sapply(strsplit(go_dt$GeneRatio, "/"), function(x) as.numeric(x[1]) / as.numeric(x[2]))

# 如果你想在每个ONTOLOGY中取前n个term:
library(dplyr)
go_dt_top <- go_dt %>%
  group_by(ONTOLOGY) %>%
  slice_min(order_by = p.adjust, n = 5) %>%
  ungroup()

# 绘图
mytheme <- theme(axis.text.x = element_text(hjust = 0.5, size = 12), 
                 axis.text.y = element_text(size = 10),
                 axis.title.x = element_text(size = 10, color="darkgreen"),
                 axis.title.y = element_text(size = 10, color="darkred"),
                 plot.title = element_text(hjust = 0.5, size = 18, color="black",face = "bold"),
                 strip.text = element_text(size = 12, face="bold"),
                 legend.title = element_text(size = 10, color="purple"),
                 legend.text = element_text(size = 10, color="brown"))

p_go_facet <- ggplot(go_dt_top, aes(x = reorder(Description, GeneRatio), y = GeneRatio, fill = -log10(pvalue))) +
  geom_point(aes(size = Count), shape = 21, colour = "black") +
  scale_fill_gradientn(colours = c("#f7ca64", "#46bac2", "#7e62a3")) +
  scale_size_continuous(range = c(3, 8)) +
  coord_flip() + theme_bw() + mytheme +
  facet_grid(ONTOLOGY~., scales="free_y", space="free_y") + # 分面
  labs(x = NULL, y = "GeneRatio", title = "GO Enrichment", 
       fill = bquote("-"~Log[10]~"(Pvalue)"), size = "Gene Count") +
  scale_x_discrete(labels = function(x) str_wrap(x, width=50))

p_go_facet
ggsave('table+figure/go_all.pdf',plot = p_go_facet,height = 7,width = 8)

最后绘制的图如下,相较于原始的气泡图,会好看很多

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 可视化—KEGG\GO分析结果气泡图美化
    • 1.KEGG
    • 2.GO
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档