gseaplot3修改一下clusterProfiler默认绘图函数

直接使用clusterProfiler::gseaplot2绘图会出现下边的结果,导致四周显示不全,线的粗细也没办法调整,因为返回的是一个aplot包中的gglist对象,没太多研究。

p1 <- clusterProfiler::gseaplot2(gsea_result, gsea_result$ID, pvalue_table = T, base_size = 18, ES_geom='line')

在这里插入图片描述

自定义gseaplot3函数增加了size参数调整线的粗细,也调整了margin四周边距,可以在下边gseaplot3函数的基础上继续调整,如果需要的话。

p2 <- gseaplot3(gsea_result, gsea_result$ID, pvalue_table = T, base_size = 18, ES_geom='line', size=1.8)

在这里插入图片描述

gseaplot3 <- function (x, geneSetID, title = "", color = "green", base_size = 15, size=1.8,rel_heights = c(1.5, 0.5, 1), subplots = 1:3, pvalue_table = FALSE, ES_geom = "line") 
{library(grid)library(DOSE)gseaScores <- getFromNamespace("gseaScores", "DOSE")ES_geom <- match.arg(ES_geom, c("line", "dot"))geneList <- position <- NULLif (length(geneSetID) == 1) {gsdata <- gsInfo(x, geneSetID)}else {gsdata <- do.call(rbind, lapply(geneSetID, gsInfo, object = x))}p <- ggplot(gsdata, aes_(x = ~x)) + xlab(NULL) + theme_classic(base_size) + theme(panel.grid.major = element_line(colour = "grey92"), panel.grid.minor = element_line(colour = "grey92"), panel.grid.major.y = element_blank(), panel.grid.minor.y = element_blank()) + scale_x_continuous(expand = c(0, 0))if (ES_geom == "line") {es_layer <- geom_line(aes_(y = ~runningScore, color = ~Description), size = size)}else {es_layer <- geom_point(aes_(y = ~runningScore, color = ~Description), size = size, data = subset(gsdata, position == 1))}p.res <- p + es_layer + theme(legend.position = c(0.8, 0.8), legend.title = element_blank(), legend.background = element_rect(fill = "transparent"))p.res <- p.res + ylab("Running Enrichment Score") + theme(axis.text.x = element_blank(), axis.ticks.x = element_blank(), axis.line.x = element_blank(), plot.margin = margin(t = 0.2, r = 0.2, b = 0, l = 0.2, unit = "cm"))i <- 0for (term in unique(gsdata$Description)) {idx <- which(gsdata$ymin != 0 & gsdata$Description == term)gsdata[idx, "ymin"] <- igsdata[idx, "ymax"] <- i + 1i <- i + 1}p2 <- ggplot(gsdata, aes_(x = ~x)) + geom_linerange(aes_(ymin = ~ymin, ymax = ~ymax, color = ~Description)) + xlab(NULL) + ylab(NULL) + theme_classic(base_size) + theme(legend.position = "none", plot.margin = margin(t = -0.1, b = 0, unit = "cm"), axis.ticks = element_blank(), axis.text = element_blank(), axis.line.x = element_blank()) + scale_x_continuous(expand = c(0, 0)) + scale_y_continuous(expand = c(0, 0))if (length(geneSetID) == 1) {v <- seq(1, sum(gsdata$position), length.out = 9)inv <- findInterval(rev(cumsum(gsdata$position)), v)if (min(inv) == 0) inv <- inv + 1col <- c(rev(brewer.pal(5, "Blues")), brewer.pal(5, "Reds"))ymin <- min(p2$data$ymin)yy <- max(p2$data$ymax - p2$data$ymin) * 0.3xmin <- which(!duplicated(inv))xmax <- xmin + as.numeric(table(inv)[as.character(unique(inv))])d <- data.frame(ymin = ymin, ymax = yy, xmin = xmin, xmax = xmax, col = col[unique(inv)])p2 <- p2 + geom_rect(aes_(xmin = ~xmin, xmax = ~xmax, ymin = ~ymin, ymax = ~ymax, fill = ~I(col)), data = d, alpha = 0.9, inherit.aes = FALSE)}df2 <- p$datadf2$y <- p$data$geneList[df2$x]p.pos <- p + geom_segment(data = df2, aes_(x = ~x, xend = ~x, y = ~y, yend = 0), color = "grey")p.pos <- p.pos + ylab("Ranked List Metric") + xlab("Rank in Ordered Dataset") + theme(plot.margin = margin(t = -0.1, r = 0.2, b = 0.2, l = 0.2, unit = "cm"))if (!is.null(title) && !is.na(title) && title != "") p.res <- p.res + ggtitle(title)if (length(color) == length(geneSetID)) {p.res <- p.res + scale_color_manual(values = color)if (length(color) == 1) {p.res <- p.res + theme(legend.position = "none")p2 <- p2 + scale_color_manual(values = "black")}else {p2 <- p2 + scale_color_manual(values = color) + theme(legend.position = "none",plot.margin=margin(t = 0.1, r = 0.2, b = 0.1, l = 0.2, unit = "cm"))}}if (pvalue_table) {pd <- x[geneSetID, c("Description", "pvalue", "p.adjust")]rownames(pd) <- pd$Descriptionpd <- pd[, -1]for (i in seq_len(ncol(pd))) {pd[, i] <- format(pd[, i], digits = 3)}tp <- tableGrob2(pd, p.res)p.res <- p.res + theme(legend.position = "none",plot.margin=margin(t = 0.8, r = 0.2, b = 0.2, l = 0.2,unit = "cm")) + annotation_custom(tp, xmin = quantile(p.res$data$x, 0.5), xmax = quantile(p.res$data$x, 0.95), ymin = quantile(p.res$data$runningScore, 0.75), ymax = quantile(p.res$data$runningScore, 0.9))}plotlist <- list(p.res, p2, p.pos)[subplots]n <- length(plotlist)plotlist[[n]] <- plotlist[[n]] + theme(axis.line.x = element_line(), axis.ticks.x = element_line(), axis.text.x = element_text())if (length(subplots) == 1) return(plotlist[[1]] + theme(plot.margin = margin(t = 0.2, r = 0.2, b = 0.2, l = 0.2, unit = "cm")))if (length(rel_heights) > length(subplots)) rel_heights <- rel_heights[subplots]aplot::gglist(gglist = plotlist, ncol = 1, heights = rel_heights)}gsInfo <- function(object, geneSetID) {geneList <- object@geneListif (is.numeric(geneSetID))geneSetID <- object@result[geneSetID, "ID"]geneSet <- object@geneSets[[geneSetID]]exponent <- object@params[["exponent"]]df <- gseaScores(geneList, geneSet, exponent, fortify=TRUE)df$ymin <- 0df$ymax <- 0pos <- df$position == 1h <- diff(range(df$runningScore))/20df$ymin[pos] <- -hdf$ymax[pos] <- hdf$geneList <- geneListdf$Description <- object@result[geneSetID, "Description"]return(df)
}tableGrob2 <- function(d, p = NULL) {# has_package("gridExtra")d <- d[order(rownames(d)),]tp <- gridExtra::tableGrob(d)if (is.null(p)) {return(tp)}# Fix bug: The 'group' order of lines and dots/path is differentp_data <- ggplot_build(p)$data[[1]]# pcol <- unique(ggplot_build(p)$data[[1]][["colour"]])p_data <- p_data[order(p_data[["group"]]), ]pcol <- unique(p_data[["colour"]])## This is fine too## pcol <- unique(p_data[["colour"]])[unique(p_data[["group"]])]  j <- which(tp$layout$name == "rowhead-fg")for (i in seq_along(pcol)) {tp$grobs[j][[i+1]][["gp"]] <- gpar(col = pcol[i])}return(tp)
}

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

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

相关文章

JavaScript初见

书写位置 和css差不多 行内script标签内script所引的js文件 输入输出语句 输入 prompt();输出 console();// 控制台显示 alert();//弹出框 alert(字符串 变量 ’\n‘);变量 声明 var neme 原神; var tele 1;不用管类型&#xff0c;真不错啊 **js中变量的声明不需…

Logback框架基本认识

文章目录 一.什么是Logback1.1 初识Logbcak 二.Logbcak的结构三.日志的级别四.配置组件详解4.1 logger 日志记录器属性的介绍如何在配置文件里配置 4.2 appender 附加器 配合日志记录器的输出格式4.2.1 控制台附加器4.2.2 文件附加器4.3.3滚动文件附加器 4.3 Filter: 过滤器&am…

记录一次应用服务响应慢问题排查过程

3个自建系统使用了一个统一的外部系统接入服务&#xff0c;该服务主要是统一处理外部系统对接&#xff0c;处理掉数据鉴权等问题&#xff0c;提供内部鉴权接口给自己的服务使用。类似一个对接网关。 问题背景 研发反应&#xff0c;后端接口请求时快时慢&#xff0c;影响演示效…

【MATLAB】快速绘制曲线图的形状,粗细,颜色

目录 MATLAB 快速绘制曲线图的形状&#xff0c;粗细&#xff0c;颜色 1.通过改变R-G-B 的值改变线条的颜色&#xff1a;2.通过改变c∈[1,∞)的值改变线条的粗细&#xff1a;3.线条形状&#xff0c;粗细&#xff0c;颜色选择&#xff1a;4.Matlab中画图实现案例&#xff1a; MA…

js封装根据年月日获取星座效果demo(整理)

//根据年月日获取星座 function getZodiacSign(dateString) {// 用法:const dateStr 2024-01-11;// const zodiacSign getZodiacSign(dateStr);const date new Date(dateString);const month date.getMonth() 1;const day date.getDate();if ((month 1 && day &…

Python教程39:使用turtle画美国队长盾牌

---------------turtle源码集合--------------- Python教程36&#xff1a;海龟画图turtle写春联 Python源码35&#xff1a;海龟画图turtle画中国结 Python源码31&#xff1a;海龟画图turtle画七道彩虹 Python源码30&#xff1a;海龟画图turtle画紫色的小熊 Python源码29&a…

【uview2.0】Keyboard 键盘 与 CodeInput 验证码输入 结合使用 uview

https://www.uviewui.com/components/codeInput.html &#xff08;CodeInput 验证码输入&#xff09; https://www.uviewui.com/components/keyboard.html &#xff08;Keyboard 键盘&#xff09; <u-keyboard mode"number" :dotDisabled"true" :show&q…

一体式气象站的优点是什么?带大家了解一下

一体式气象站是一款高度集成、低功耗、可快速安装、便于野外监测使用的高精度自动气象观测设备。 一体式气象站的优点主要体现在以下几个方面&#xff1a; 集成度高&#xff1a;一体式气象站集成了多种气象传感器、数据处理单元、显示单元和通讯模块等&#xff0c;可以同时监…

2019年认证杯SPSSPRO杯数学建模B题(第一阶段)外星语词典全过程文档及程序

2019年认证杯SPSSPRO杯数学建模 基于方差分布的方法对未知语言文本中重复片段的自动搜索问题的研究 B题 外星语词典 原题再现&#xff1a; 我们发现了一种未知的语言&#xff0c;现只知道其文字是以 20 个字母构成的。我们已经获取了许多段由该语言写成的文本&#xff0c;但…

2024年【熔化焊接与热切割】考试内容及熔化焊接与热切割免费试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 熔化焊接与热切割考试内容是安全生产模拟考试一点通总题库中生成的一套熔化焊接与热切割免费试题&#xff0c;安全生产模拟考试一点通上熔化焊接与热切割作业手机同步练习。2024年【熔化焊接与热切割】考试内容及熔化…

ceph、gluster、longhorn选型对比

Ceph Ceph是一个分布式的存储系统&#xff0c;可以在统一的系统中提供唯一的对象、块和文件存储。 名词解释&#xff1a; RADOS&#xff1a; 由自我修复、自我管理、智能存储节点组成的可靠、自主、分布式对象存储LIBRADOS&#xff1a; 一个允许应用程序直接访问 RADO 的库&…

怎么做拼团链接_生鲜果蔬商家都在用的小程序拼团系统

拼团链接&#xff1a;重塑营销新格局 在当今这个信息爆炸的时代&#xff0c;消费者面对海量信息&#xff0c;选择变得尤为重要。如何在众多品牌中脱颖而出&#xff0c;让消费者愿意主动为你驻足&#xff1f;答案就是——拼团链接。 拼团&#xff0c;是一种社交电商的创新形式。…

Clickhouse实时指标加工

Starwift实时指标加工方案 方案介绍 ​ Starwift(ClickHouse)是京东云上的一款云原生数据仓库,为用户带来极速分析体验,能够支撑实时数据分析和海量数据离线分析。便捷的弹性扩缩容能力,极致分析性能和丰富的企业级特性,助力客户数字化转型。实时指标加工是从离线指标加…

Windows RPC运行时漏洞事后总结

2022年4月前后&#xff0c;Windows RPC运行时被曝出存在远程代码执行漏洞&#xff0c;当时曾引起很多人广泛关注。微软很快做出反应&#xff0c;发布补丁程序进行修补。这次事件中&#xff0c;Windows远程过程调用&#xff08;RPC&#xff09;运行时共出现三个关键漏洞&#xf…

Xcode15一个xcworkspace管理多个xcodeproj从零开始,一个主程序,多个子程序,一个主程序引用多个静态库

创建主程序&#xff1a;MainProject 目录结构&#xff1a; sandbox设置成NO&#xff1a;否则Xcode15不能运行 创建子程序 创建Framework 创建多个子程序后的目录结构 在主程序的Podfile中添加代码 # Uncomment the next line to define a global platform for your project pla…

Zabbix6.4 监控系统 密码忘记怎么办

Zabbix6.4 监控系统 密码忘记怎么办&#xff1f; 如下图 本次主要介绍在Zabbix6.4中重置用户密码的步骤。 步骤 如果您忘记了Zabbix密码并且无法登录&#xff0c;请向Zabbix管理员求助。 超级管理员用户可以在用户配置表单中更改所有用户的密码。 如果超级用户忘记了密码&a…

U8 内嵌.Net UserControl,winform挂菜单

目录 1.创建类库2.项目引用U8安装路径dll&#xff1a;3.新建类MyLoginable 继承 NetLoginable&#xff1a;4.新建类 MyNetUserControl 实现接口 INetUserControl&#xff1a;5.新建类 NetSampleDelegate 实现上面的CreateToolbar方法6.新建你的用户控件7.最后一步到UAP挂接菜单…

【设计模式-02】Strategy策略模式及应用场景

一、参考资料 Java 官方文档 Overview (Java SE 18 & JDK 18)module indexhttps://docs.oracle.com/en/java/javase/18/docs/api/index.html Java中使用到的策略模式 Comparator、comparable Comparator (Java SE 18 & JDK 18)declaration: module: java.base, pa…

计算数学表达式的程序(Java课程设计)

1. 课设团队介绍 团队名称 团队成 员介绍 任务分配 团队成员博客 XQ Warriors 徐维辉 负责计算器数据的算法操作&#xff0c;如平方数、加减乘除&#xff0c;显示历史计算记录 无 邱良厦&#xff08;组长&#xff09; 负责计算器的图形设计&#xff0c;把输入和结果显…

模型评估:ROC曲线

二值分类器&#xff08;Binary Classifier&#xff09;是机器学习领域中最常见也是应用最广泛的分类器。评价二值分类器的指标很多&#xff0c;比如precision、recall、F1 score、P-R曲线等。相比而言&#xff0c;ROC曲线有很多优点&#xff0c;经常作为评估而知分类器最重要的…