之前做的图比较丑,这里记录下比较好看的美化代码。没有封装函数了,改起来比较方便,随用随拿。
以小鼠基因为例
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)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 删除。