ggkegg玩转KEGG数据 | 富集 | 可视化

本期内容

写在前面

今天分享一个关于KEGG通路图绘制的R包,也许在你后面的分析中可以使用得到。

在KEGG富集分析中,若我们要绘制某一个富集通路,一般回到KEGG官网中寻找该通路的富集图。然后,通过AI,PPT等等一系列手段进行绘制。但是,目前也有一些云平台可以使用,就看自己如何绘制。

今天,分享ggkegg包,一个用于绘制KEGG富集通路的R包,实用性也很强,以及作者提供了详细的帮助文档(PS:我们也基于机器翻译,整理了ggkegg的帮助文档,后面会提供给大家)。

2023教程汇总:2023年教程汇总 | 《小杜的生信笔记》

原文链接:ggkegg | 对KEGG数据进行可视化

加载R包

## 安装R包
BiocManager::install("ggkegg")
# or
devtools::install_github("noriakis/ggkegg")##--------------------
library(ggkegg)
library(ggfx)
library(igraph)
library(tidygraph)
library(dplyr)

一个简单的例子01

pathway("ko01100") |>process_line() |>highlight_module(module("M00021")) |>highlight_module(module("M00338")) |>ggraph(x=x, y=y) +geom_node_point(size=1, aes(color=I(fgcolor),filter=fgcolor!="none" & type!="line")) +geom_edge_link0(width=0.1, aes(color=I(fgcolor),filter=type=="line"& fgcolor!="none")) +with_outer_glow(geom_edge_link0(width=1,aes(color=I(fgcolor),filter=(M00021 | M00338))),colour="red", expand=5) +with_outer_glow(geom_node_point(size=1.5,aes(color=I(fgcolor),filter=(M00021 | M00338))),colour="red", expand=5) +geom_node_text(size=2,aes(x=x, y=y,label=graphics_name,filter=name=="path:ko00270"),repel=TRUE, family="sans", bg.colour="white") +theme_void()

compounds <- c("cpd:C00100", "cpd:C00894", "cpd:C00894", "cpd:C05668","cpd:C05668", "cpd:C01013", "cpd:C01013", "cpd:C00222","cpd:C00222", "cpd:C00024")
g <- pathway("ko00640") |> mutate(mod=highlight_set_nodes(compounds, how="all"))
ggraph(g, layout="manual", x=x, y=y)+geom_node_rect(fill="grey",aes(filter=type == "ortholog"))+overlay_raw_map("ko00640")+geom_node_point(aes(filter=type == "compound"),shape=21, fill="blue", color="black", size=2)+ggfx::with_outer_glow(geom_node_point(aes(filter=mod, x=x, y=y), color="red",size=2),colour="yellow",expand=5)+theme_void()

g <- pathway("hsa04110")
pseudo_lfc <- sample(seq(0,3,0.1), length(V(g)), replace=TRUE)
names(pseudo_lfc) <- V(g)$nameggkegg("hsa04110",convert_org = c("pathway","hsa","ko"),numeric_attribute = pseudo_lfc)+geom_edge_parallel2(aes(color=subtype_name),arrow = arrow(length = unit(1, 'mm')), start_cap = square(1, 'cm'),end_cap = square(1.5, 'cm')) + geom_node_rect(aes(filter=.data$type == "group"),fill="transparent", color="red") +geom_node_rect(aes(fill=numeric_attribute,filter=.data$type == "gene")) +geom_node_text(aes(label=converted_name,filter=.data$type == "gene"),size=2.5,color="black") +with_outer_glow(geom_node_text(aes(label=converted_name,filter=converted_name=="PCNA"),size=2.5, color="red"),colour="white", expand=4) +scale_edge_color_manual(values=viridis::plasma(11)) +scale_fill_viridis(name="LFC") +theme_void()

常用例子02

多个微生物基因组评估模块完整性

跨多个微生物基因组评估模块完整性

mod <- module("M00009")
query <- sample(attr(mod, "definition_components"), 5) |>strsplit(":") |>sapply("[",2)
query
#> [1] "K01677" "K00164" "K00247" "K00240" "K00246"
mod |>module_completeness(query) |>kableExtra::kable()

我们可以评估从多个物种基因组中推断出的 KO 的完整性。在这里,我们将从 PATRIC 服务器获得的 MIDAS 流水线注释文件中可用的 EC 编号映射到 KO,并计算随机获得的物种的完整性。

## Load pre-computed KOs, and recursively perform completeness calculation.
mf <- list.files("../")
mf <- mf[startsWith(mf, "M")]
annos <- list()candspid <- list.files("../species_dir")
candspid <- sample(candspid, 10)## Obtain EC to KO mapping file from KEGG REST API
mapper <- data.table::fread("https://rest.kegg.jp/link/ec/ko", header=FALSE)suppressMessages(for (i in candspid) {mcs <- NULLdf <- read.table(paste0("../species_dir/",i), sep="\t", header=1)fid <- paste0("ec:",df[df$ontology=="ec",]$function_id)kos <- mapper[mapper$V2 %in% fid,]$V1 |> strsplit(":") |> sapply("[",2) |> unique()for (mid in mf) {mc <- module_completeness(module(mid, directory="../"),query = kos)mcs <- c(mcs, mc$complete |> mean()) ## Mean of blocks}annos[[as.character(i)]] <- mcs}
)

接下来,我们将使用 ComplexHeatmap 和 simple yEnrich 来可视化结果。我们将通过简化 Enrich 将模块描述的单词云与热图一起绘制,用于确定的集群。

library(ComplexHeatmap)## Make data.frame
hdf <- data.frame(annos, check.names=FALSE)
row.names(hdf) <- mf
hdf[is.na(hdf)] <- 0
hdf <- hdf[apply(hdf, 1, sum)!=0,]## Prepare for word cloud annotation
moddesc <- data.table::fread("https://rest.kegg.jp/list/module", header=FALSE)## Obtain K-means clustering
km = kmeans(hdf, centers = 10)$clustergene_list <- split(row.names(hdf), km)
gene_list <- lapply(gene_list, function(x) {x[!is.na(x)]
})annotList <- list()
for (i in names(gene_list)) {maps <- (moddesc |> dplyr::filter(V1 %in% gene_list[[i]]))$V2annotList[[i]] <-  maps
}
col_fun = circlize::colorRamp2(c(0, 0.5, 1),c(scales::muted("blue"), "white", scales::muted("red")))ht1 <- Heatmap(hdf, show_column_names = TRUE,col=col_fun, row_split=km,heatmap_legend_param = list(legend_direction = "horizontal", legend_width = unit(5, "cm")),rect_gp = gpar(col = "white", lwd = 2),name="Module completeness", border=TRUE,column_names_max_height =unit(10,"cm"))+rowAnnotation(keywords = simplifyEnrichment::anno_word_cloud(align_to = km,term=annotList,exclude_words=c("pathway","degradation","biosynthesis"),max_words = 40,fontsize_range = c(5,20)))
ht1

例子03

通过使用 ggforce,可以绘制多个图表来显示哪些基因属于哪个网络。

kne3 <- network("N00485") ## EBV
kne4 <- network("N00030") ## EGF-EGFR-RAS-PI3K
three <- kne3 |> network_graph()
four <- kne4 |> network_graph()gg <- Reduce(function(x,y) graph_join(x,y, by="name"), list(one, two, three, four))
coln <- gg |> activate(nodes) |> data.frame() |> colnames() 
nids <- coln[grepl("network_ID",coln)]net <- plot_kegg_network(gg)
for (i in nids) {net <- net + ggforce::geom_mark_hull(alpha=0.2, aes(group=.data[[i]],fill=.data[[i]], x=x, y=y, filter=!is.na(.data[[i]])))
}
net + scale_fill_manual(values=viridis::plasma(4), name="ID")

例子04

## Numeric vector (name is SYMBOL)
vinflfc <- vinf$log2FoldChange |> setNames(row.names(vinf))g |> ## Use graphics_name to mergemutate(grname=strsplit(graphics_name, ",") |> vapply("[", 1, FUN.VALUE="a")) |>activate(edges) |>mutate(summed = edge_numeric_sum(vinflfc, name="grname")) |>filter(!is.na(summed)) |>activate(nodes) |> mutate(x=NULL, y=NULL, deg=centrality_degree(mode="all")) |>filter(deg>0) |>ggraph(layout="nicely")+geom_edge_parallel(aes(color=summed, width=summed,linetype=subtype_name),arrow=arrow(length=unit(1,"mm")),start_cap=circle(2,"mm"),end_cap=circle(2,"mm"))+geom_node_point(aes(fill=I(bgcolor)))+geom_node_text(aes(label=grname,filter=type=="gene"),repel=TRUE, bg.colour="white")+scale_edge_width(range=c(0.1,2))+scale_edge_color_gradient(low="blue", high="red", name="Edge")+theme_void()

例子05-绘制通路富集全局图

使用 ko01100中的默认值和计算程度来可视化整个全局地图。

ggraph(g2, layout="fr")+geom_edge_link0(aes(color=I(fgcolor)), width=0.1)+geom_node_point(aes(fill=I(fgcolor), size=Degree), color="black", shape=21)+theme_graph()


为了有效地进行可视化,我们可以在 KEGG 路径中的各个组件上应用各种宝石图。在这个例子中,我们通过 ggfx 突出显示了由其 LFC 着色的重要边(KO) ,点大小对应于网络中的度,并且我们显示了重要 KO 名称的边标签。KO 名称由“物种”属性着色。这次我们把这个设置为大肠桿菌和其他。

ggraph(g2, layout="fr") +geom_edge_diagonal(color="grey50", width=0.1)+ ## Base edgeggfx::with_outer_glow(geom_edge_diagonal(aes(color=kolfc,filter=siglgl),angle_calc = "along",label_size=2.5),colour="gold", expand=3)+ ## Highlight significant edgesscale_edge_color_gradient2(midpoint = 0, mid = "white",low=scales::muted("blue"),high=scales::muted("red"),name="LFC")+ ## Set gradient colorgeom_node_point(aes(fill=bgcolor,size=Degree),shape=21,color="black")+ ## Node size set to degreescale_size(range=c(1,4))+geom_edge_label_diagonal(aes(label=kon,label_colour=Species,filter=siglgl),angle_calc = "along",label_size=2.5)+ ## Showing edge label, label color is Species attributescale_label_colour_manual(values=c("tomato","black"),name="Species")+ ## Scale color for edge labelscale_fill_manual(values=hex,labels=class,name="Class")+ ## Show legend based on HEXtheme_graph()+guides(fill = guide_legend(override.aes = list(size=5))) ## Change legend point size

## Subset and do the same thing
g2 |>morph(to_subgraph, siglgl) |>activate(nodes) |>mutate(tmp=centrality_degree(mode="all")) |>filter(tmp>0) |>mutate(subname=compn) |>unmorph() |>activate(nodes) |>filter(bgcolor=="#B3B3E6") |>mutate(Degree=centrality_degree(mode="all")) |> ## Calculate degreefilter(Degree>0) |>
ggraph(layout="fr") +geom_edge_diagonal(color="grey50", width=0.1)+ ## Base edgeggfx::with_outer_glow(geom_edge_diagonal(aes(color=kolfc,filter=siglgl),angle_calc = "along",label_size=2.5),colour="gold", expand=3)+scale_edge_color_gradient2(midpoint = 0, mid = "white",low=scales::muted("blue"),high=scales::muted("red"),name="LFC")+geom_node_point(aes(fill=bgcolor,size=Degree),shape=21,color="black")+scale_size(range=c(1,4))+geom_edge_label_diagonal(aes(label=kon,label_colour=Species,filter=siglgl),angle_calc = "along",label_size=2.5)+ ## Showing edge labelscale_label_colour_manual(values=c("tomato","black"),name="Species")+ ## Scale color for edge labelgeom_node_text(aes(label=stringr::str_wrap(subname,10,whitespace_only = FALSE)),repel=TRUE, bg.colour="white", size=2)+scale_fill_manual(values=hex,labels=class,name="Class")+theme_graph()+guides(fill = guide_legend(override.aes = list(size=5)))

ggkegg更多及更详细的用法,请看:https://noriakis.github.io/software/ggkegg/index.html

为了方便的使用,我们基于机器翻译,将ggkegg帮助文档进行翻译。译文后续将提供给大家。

往期文章:

1. 复现SCI文章系列专栏

2. 《生信知识库订阅须知》,同步更新,易于搜索与管理。

3. 最全WGCNA教程(替换数据即可出全部结果与图形)

  • WGCNA分析 | 全流程分析代码 | 代码一

  • WGCNA分析 | 全流程分析代码 | 代码二

  • WGCNA分析 | 全流程代码分享 | 代码三

  • WGCNA分析 | 全流程分析代码 | 代码四

  • WGCNA分析 | 全流程分析代码 | 代码五(最新版本)


4. 精美图形绘制教程

  • 精美图形绘制教程

5. 转录组分析教程

转录组上游分析教程[零基础]

一个转录组上游分析流程 | Hisat2-Stringtie

小杜的生信筆記 ,主要发表或收录生物信息学的教程,以及基于R的分析和可视化(包括数据分析,图形绘制等);分享感兴趣的文献和学习资料!!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL】数据库之小题练习(完全备份和增量备份的数据恢复,以及断点恢复)

目录 先创建库&#xff0c;创建表&#xff0c;完成三次数据的录入以及第一次的完全备份&#xff0c;第二次和第三次的增量备份&#xff1b; 第一次完全备份操作 第二次插入后做增量备份操作 第三次 插入后做增量备份操作 1、完全备份恢复&#xff0c;获取一班的人的成绩 …

内网穿透中微子代理搭建使用

内网穿透中微子代理搭建使用 环境准备服务器端部署客户端安装服务器开启端口 环境准备 中微子代理项目地址 最新版是2.0.1版本,需要java21的环境,考虑到现在项目大多数环境都是java8,稳重使用1.9版本搭建,jar下载地址: 准备一台有公网ip的服务器(或云服务器),本文中使用阿里…

【教程】从gitee或者github,下载单个文件或文件夹命令

1.打开git 2.初始化 git init 3.设置允许下载子目录 &#xff08;不需要修改任何&#xff0c;只要原样复制&#xff0c;需要按照个人状况修改的话我会标注&#xff09; git config core.sparseCheckout true 4. 选择要下载的单个文件夹的路径 这里单引号内部需要修改&…

redis基本用法学习(C#调用FreeRedis操作redis)

FreeRedis属于常用的基于.net的redis客户端&#xff0c;EasyCaching中也提供适配FreeRedis的包。根据参考文献4中的说法&#xff0c;FreeRedis和CsRedis算是近亲&#xff08;都是GitHub中账号为2881099下的开源项目&#xff09;&#xff0c;因此其用法特别相似。FreeRedis的主要…

论文阅读<CF-YOLO: Cross Fusion YOLO for Object Detection in Adverse Weather.....>

论文链接&#xff1a;https://arxiv.org/pdf/2309.08152.pdfhttps://arxiv.org/pdf/2206.01381.pdfhttps://arxiv.org/pdf/2309.08152.pdf 代码链接&#xff1a;https://github.com/DiffPrompter/diff-prompter 目前没有完整代码放出。 恶劣天气下的目标检测主要有以下三种解…

docker笔记1-安装与基础命令

docker的用途&#xff1a; 可以把应用程序代码及运行依赖环境打包成镜像&#xff0c;作为交付介质&#xff0c;在各种环境部署。可以将镜像&#xff08;image&#xff09;启动成容器&#xff08;container&#xff09;&#xff0c;并提供多容器的生命周期进行管理&#xff08;…

iPad绘画之旅:从小白到文创手账设计的萌系简笔画探索

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 iPad的出现&#xff0c;不仅改变了我们对电子设…

孔夫子二手书采集

文章目录 项目演示软件采集单本数据网页搜索数据对比 使用场景概述部分核心逻辑Vb工程图数据导入与读取下拉框选择参数设置线程 使用方法下载软件授权导入文件预览处理后的数据 项目结构附件说明 项目演示 操作视频详见演示视频&#xff0c;以下为图文演示 软件采集单本数据 …

mac传输文件到windows

前言 由于mac系统与windows系统文件格式不同&#xff0c;通过U盘进行文件拷贝时&#xff0c;导致无法拷贝。 几种文件格式说明&#xff1a; NTFS 文件格式&#xff1a;只适用于 windows 系统&#xff0c;不适用于 mac 系统&#xff1b; APFS 文件格式&#xff1a;mac 系统格式…

云HIS源码 云HIS解决方案 支持医保功能

云HIS系统重建统一的信息架构体系&#xff0c;重构管理服务流程&#xff0c;重造病人服务环境&#xff0c;向不同类型的医疗机构提供SaaS化HIS服务解决方案。 云HIS作为基于云计算的B/S构架的HIS系统&#xff0c;为基层医疗机构&#xff08;包括诊所、社区卫生服务中心、乡镇卫…

Anylogic Pro 8.8.x for Mac / for Linux Crack

Digital twins – a step towards a digital enterprise AnyLogic是唯一一个支持创建模拟模型的方法的模拟建模工具&#xff1a;面向过程&#xff08;离散事件&#xff09;、系统动态和代理&#xff0c;以及它们的任何组合。AnyLogic提供的建模语言的独特性、灵活性和强大性使…

IP应用场景的规划

IP地址作为互联网通信的基石&#xff0c;在现代社会中扮演着至关重要的角色。本文将深入探讨IP地址在不同应用场景中的规划与拓展&#xff0c;探讨其在网络通信、安全、商业、医疗和智能城市等领域的关键作用与未来发展趋势。 IP地址的基本原理 IP地址是分配给网络上设备的数…

基于flask和echarts的新冠疫情实时监控系统源码+数据库,后端基于python的flask框架,前端主要是echarts

介绍 基于flask和echarts的新冠疫情实时监控系统 软件架构 后端基于python的flask框架&#xff0c;前端主要是echarts 安装教程 下载到本地&#xff0c;在python相应环境下运行app.py,flask项目部署请自行完成 使用说明 flaskProject文件夹中 app.py是flask项目主运行文…

自动驾驶中的“雷达”

自动驾驶中有好几种雷达&#xff0c;新手可能会混淆&#xff0c;这里统一介绍一下它们。 首先&#xff0c;所有雷达的原理都是发射波&#xff0c;接收回波&#xff08;可能是声波或电磁波&#xff09;&#xff0c;并通过发射和接收的时间差以及波的速度计算距离。只不过发射的…

普中STM32-PZ6806L开发板(烧录方式)

前言 有两种方式, 串口烧录和STLink方式烧录;串口烧录 步骤 开发板USB转串口CH340驱动板接线到USB连接PC使用自带工具普中自动下载软件.exe烧录程序到开发板 ST Link方式 这种方式需要另外进行供电&#xff0c; 我买的如下&#xff0c;当年用于调试STM8的&#xff0c;也可…

vsetvli/vsetivli/vsetvl

转载自&#xff1a;【《RISC-V “V“ Vector Extension Version 1.0》阅读笔记】_risc v的rvv-CSDN博客 上述指令的作用&#xff1a;快速配置 vl 和 vtype 中的值以匹配应用程序需求&#xff1b; vset{i}vl{i} 指令根据参数设置 vtype 和 vl CSR&#xff0c;并将 vl 的新值写入…

搭建Nginx文件下载站点

一、下载Nginx 首先&#xff0c;确保你的服务器上已经安装了Nginx&#xff0c;使用编译安装&#xff0c;下载最新版Nginx。 wget https://nginx.org/download/nginx-1.25.3.tar.gz tar -xf nginx-1.25.3.tar.gz二、安装Fancyindex和Nginx-Fancyindex-Theme模块 # 下载Fancyin…

基于VUE3+Layui从头搭建通用后台管理系统(前端篇)十七:演示功能模块相关功能实现

一、本章内容 本章实现常见业务功能,包括文章管理、商品管理、订单管理、会员管理等功能。 1. 详细课程地址: https://edu.csdn.net/course/detail/38183 2. 源码下载地址: 点击下载 二、界面预览 三、开发视频 3.1 B站视频地址:

3. 结构型模式 - 组合模式

亦称&#xff1a; 对象树、Object Tree、Composite 意图 组合模式是一种结构型设计模式&#xff0c; 你可以使用它将对象组合成树状结构&#xff0c; 并且能像使用独立对象一样使用它们 问题 如果应用的核心模型能用树状结构表示&#xff0c; 在应用中使用组合模式才有价值。 …

实习知识整理9: 点击直接购买按钮后,跳转到确认订单页面

1. 为按钮绑定事件 <button id"addCartButton">加入购物车</button><br/> $("#buyButton").click(function () {if ( ! loginUser) {// 如何将商品信息传递到后台&#xff0c;后台能够将内容在新的订单页面显示$("#buyItemForm&quo…