easylabel | 完美拯救手残党不会标注突出重点!(Label!~ Label!~)

news2025/2/25 15:12:30

1写在前面

我们在画图的时候经常需要标记某个值, 如散点图中的某个具体的点, 火山图中的某个基因, 但对于代码不太熟悉的小白来说, 还是有一定难度的.🤪
本期和大家介绍一个基于shiny轻松进行label的包, 即easylabel包, 轻松实现交互式label, 麻麻再也不用担心你的画图标记啦.😗

2用到的包

rm(list = ls())
# devtools::install_github("myles-lewis/easylabel")
library(easylabel)
library(tidyverse)
library(qvalue)
library(AnnotationDbi)
library(org.Hs.eg.db)
library(ggstatsplot)
library(plotly)

3散点图

3.1 初步绘图

我们先简单画个散点图, 试着标记一下吧。

这里是可以交互的,大家直接点一下就标记了哦。🤩

dat <- movies_long

dat %>%
easylabel(x = 'length',
y = 'rating',
labs = 'title',
colScheme = 'royalblue')
alt

3.2 简单导出文件

接着在底部可以找到输出按钮,点击后导出你需要的格式吧~😏

alt

3.3 导出为ploty对象

我们也可以通过设置output_shiny = F, 不激活shiny而直接导出为ploty对象, 依然是可交互的哦, 请随意移动。🤓

p1 <- easylabel(dat, 
x = 'length', y = 'rating', col = 'genre',
startLabels = dat$rating[dat$year == 1994],
output_shiny = F) %>%
layout(yaxis = list(zeroline = F))

p2 <- easylabel(dat,
x = 'length', y = 'votes', col = 'genre',
startLabels = dat$votes[dat$year == 1994],
output_shiny = F) %>%
layout(yaxis = list(zeroline = F))

plotly::subplot(p1, p2, nrows = 2, shareY = T, titleX = T, margin = 0.05)
alt

4美化细节

接着我们做一些细节的美化, 支持colour, shape, size等设置。😉

4.1 colour

easylabel(dat, 
x = 'length', y = 'budget',
col = 'genre', alpha = 0.6,
output_shiny = F,
labs = 'title',
main = 'colour')%>%
layout(yaxis = list(zeroline = F))
alt

4.2 shape

  dat[1:100,] %>% 
easylabel(
x = 'length', y = 'rating',
col = 'genre', alpha = 0.6,
shape = 'mpaa', shapeScheme = 21,
output_shiny = F,
labs = 'title',
main = 'shape') %>%
layout(yaxis = list(zeroline = F))
alt

4.3 size

  dat[1:100,] %>% 
easylabel(
x = 'length', y = 'rating',
col = 'genre', alpha = 0.6,
shape = 'mpaa', shapeScheme = 21,
size = 'budget',
output_shiny = F,
labs = 'title',
main = 'size') %>%
layout(yaxis = list(zeroline = F))
alt

4.4 轴标题

  dat[1:100,] %>% 
easylabel(
x = 'length', y = 'rating',
col = 'genre', alpha = 0.6,
shape = 'mpaa', shapeScheme = 21,
size = 'budget',
output_shiny = F,
labs = 'title',
main = 'axis title',
xlab = 'lenght minutes',
ylab = 'rating score',
showgrid = T) %>%
layout(yaxis = list(zeroline = F))
alt

5火山图

5.1 用到的数据

这里我们需要用到easyVolcano()函数, 输入文件为DESeq2, limmaEdgeR计算的差异基因结果。😂
这里我准备另一个我之前计算的limma结果。🥰

all_diff <- read.csv("./alldiff_paired.csv",row.names = 1)
DT::datatable(all_diff)
alt

5.2 初步绘图

easyVolcano会使用自动识别DESeq2, limmaEdgeR计算的差异基因结果, 但默认是使用FDR。🫠

easyVolcano(all_diff,useQ = T,
output_shiny = F,
startLabels = rownames(all_diff)[all_diff$adj.P.Val < 0.05])
alt

5.3 调整输入数据

手动选择x, y轴。😏

easyVolcano(all_diff, 
useQ = F,
x = 'logFC',
y = 'P.Value',
startLabels = rownames(all_diff)[all_diff$adj.P.Val < 0.05],
output_shiny = F)
alt

5.4 MA plot

需要用到easyMAplot函数, 也是非常容易上手.😗

easyMAplot(all_diff, useQ = T,
startLabels = rownames(all_diff)[all_diff$adj.P.Val < 0.05],
output_shiny = F)
alt

5.5 展示基因全名

有时候我们不光想展示Gene Symbol, 还想展示它的全名, 但是手动检索会非常麻烦, easyVolcano可以完美地帮你解决这个问题.🤩

easyVolcano(all_diff, useQ = T, 
fullGeneNames = T,
output_shiny = F
)
alt

5.6 左右底角添加小标题

library(RColorBrewer)

colScheme <- c('darkgrey', brewer.pal(9, 'RdYlBu')[c(9:7, 3:1)])

easyVolcano(all_diff,
useQ = F, fullGeneNames = T,
Ltitle = expression(symbol("\254") ~ "Left"),
Rtitle = expression("Right" ~ symbol("\256")),
LRtitle_side = 1, # LRtitle_side = 1 bottom ; LRtitle_side = 3 top;
cex.lab = 0.9, cex.axis = 0.8,
fccut = c(1, 2), fdrcutoff = 0.2,
ylim = c(0, 6), xlim = c(-5, 5),
colScheme = colScheme,
startLabels = rownames(all_diff)[all_diff$adj.P.Val < 0.05],
output_shiny = F
)
alt

5.7 控制label方向

我们在这里示范一下水平方向垂直方向.

p_horiz <- easyVolcano(all_diff,
useQ = F, fullGeneNames = T,
Ltitle = expression(symbol("\254") ~ "Left"),
Rtitle = expression("Right" ~ symbol("\256")),
LRtitle_side = 1, # LRtitle_side = 1 bottom ; LRtitle_side = 3 top;
cex.lab = 0.9, cex.axis = 0.8,
fccut = c(1, 2), fdrcutoff = 0.2,
ylim = c(0, 6), xlim = c(-5, 5),
colScheme = colScheme,
labelDir = "horiz",
startLabels = rownames(all_diff)[all_diff$adj.P.Val < 0.05],
output_shiny = F
)

p_vert <- easyVolcano(all_diff,
useQ = F, fullGeneNames = T,
Ltitle = expression(symbol("\254") ~ "Left"),
Rtitle = expression("Right" ~ symbol("\256")),
LRtitle_side = 1, # LRtitle_side = 1 bottom ; LRtitle_side = 3 top;
cex.lab = 0.9, cex.axis = 0.8,
fccut = c(1, 2), fdrcutoff = 0.2,
ylim = c(0, 6), xlim = c(-5, 5),
colScheme = colScheme,
labelDir = "vert",
startLabels = rownames(all_diff)[all_diff$adj.P.Val < 0.05],
output_shiny = F
)


plotly::subplot(p_horiz, p_vert, nrows = 2, shareY = T, titleX = T, margin = 0.05)
alt

5.8 统一label和point的颜色

我们经常会遇到这种问题, 希望labelpoint统一颜色, 这样会更加美观。 🤒
这也提供了相应的解决办法, 设置text_col = "match"以及 line_col = "match"即可.🥳

easyVolcano(all_diff,
useQ = F, fullGeneNames = T,
Ltitle = expression(symbol("\254") ~ "Left"),
Rtitle = expression("Right" ~ symbol("\256")),
LRtitle_side = 1, # LRtitle_side = 1 bottom ; LRtitle_side = 3 top;
cex.lab = 0.9, cex.axis = 0.8,
fccut = c(1, 2), fdrcutoff = 0.2,
ylim = c(0, 6), xlim = c(-5, 5),
colScheme = colScheme,
startLabels = rownames(all_diff)[all_diff$P.Value < 0.01],
line_col = "match", text_col = "match",
rectangles = T, border_col = NA,
rect_col = "match", border_radius = 20, padding = 5,
output_shiny = F
)
alt

6曼哈顿图

这里我们也让pointlabel的颜色统一起来吧,颜值提升一下。😘

library(CMplot)

data("cattle50K")

chromCols <- RColorBrewer::brewer.pal(6, 'Paired')

easyManhattan(cattle50K,
chrom = "chr",
pos = "pos",
p = "Somatic cell score",
chromCols = chromCols,
ylab = "Somatic cell score",
output_shiny = F,
labs = "SNP",
npeaks = 10, ## 标注peak前10
labelDir = "vert",
line_col = "match", text_col = "match",
rectangles = T, border_col = NA,
rect_col = "match", border_radius = 20, padding = 5,
)
alt

刨冰
最后祝大家早日不卷!~

点个在看吧各位~ ✐.ɴɪᴄᴇ ᴅᴀʏ 〰

📍 往期精彩

📍 🤩 ComplexHeatmap | 颜狗写的高颜值热图代码!
📍 🤥 ComplexHeatmap | 你的热图注释还挤在一起看不清吗!?
📍 🤨 Google | 谷歌翻译崩了我们怎么办!?(附完美解决方案)
📍 🤩 scRNA-seq | 吐血整理的单细胞入门教程
📍 🤣 NetworkD3 | 让我们一起画个动态的桑基图吧~
📍 🤩 RColorBrewer | 再多的配色也能轻松搞定!~
📍 🧐 rms | 批量完成你的线性回归
📍 🤩 CMplot | 完美复刻Nature上的曼哈顿图
📍 🤠 Network | 高颜值动态网络可视化工具
📍 🤗 boxjitter | 完美复刻Nature上的高颜值统计图
📍 🤫 linkET | 完美解决ggcor安装失败方案(附教程)
📍 ......

本文由 mdnice 多平台发布

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

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

相关文章

全国青少年软件编程(Scratch)等级考试二级考试真题2021年12月——持续更新.....

电子学会202112Scratc二级真题及参考答案 1.舞台上有3个角色,小猫的程序如下图所示,另外两个角色没有程序。点击绿旗,下列选项正确的是? A.小猫随鼠标移动,可能会遮挡其他两个角色 B.小猫随鼠标移动,可能会被其他两个角色遮挡 C.小猫不会随鼠标移动,更不会被遮挡 D.…

一睹风采,见证郁锦香酒店遍布全球核心城市的百变姿态

随着消费需求的不断升级&#xff0c;酒店消费场景也进行着多元化的发展&#xff0c;城市高端度假品牌正积极溯源消费需求&#xff0c;寻得品牌文化延伸的可靠路径。同时&#xff0c;各大酒店品牌也加快在市场布局的脚步&#xff0c;希望通过布局城市核心区域获得可持续发展的更…

企业微信-自建应用二:消息发送测试

1.开发过程 要测试企微自建应用的消息发送功能 企业微信开发者中心-调试工具 建立连接 corpsecret即是自建应用的Secret 输入参数&#xff0c;调用接口&#xff0c;即可拿到返回的token 发送应用消息 填写token&#xff0c;以及body消息体 {"touser": "Us…

Birdboot第二天

目录 V4 HttpServletRequest保存请求内容 1.此类专门处理请求 把获取请求的readline()和拆分代码移动过来 2.ClientHandler客户端处理器实例化HttpServletRequest 3. 拆分的信息从局部变量 变成属性 4.建方法 解析请求行 消息头 消息正文 V5 发送响应 1.在客户端处理器 …

非洲秃鹫优化算法:求解全局优化问题的一种新的自然启发元启发式算法(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 元启发式在解决优化问题中起着至关重要的作用。大多数此类算法的灵感来自于自然界中生物的集体智能和觅食。本文以非洲秃鹫的生…

YOLOv4:目标检测的最佳速度和精度

来源&#xff1a;投稿 作者&#xff1a;王同学 编辑&#xff1a;学姐 《YOLOv4&#xff1a;Optimal Speed and Accuracy of Object Detection》 发表时间及作者&#xff1a;2020 CVPR 目录 1.YOLOv4介绍 2.YOLOv4网络结构 2.1 Backbone改进 2.2 Neck改进 3.YOLOv4训练策…

java多线程基础

java多线程基础1. 线程是什么2. 线程的创建和运行方式1&#xff1a;继承Thread类示例:方式2&#xff1a;实现Runnable接口(推荐)示例:3. Thread类的常用方法4. 线程插队&#xff08;1&#xff09;yield 当前线程把时间片让给其它线程&#xff0c;不一定成功示例:&#xff08;2&…

数据库基础-Mongodb数据库复制操作

Mongodb数据库复制操作 关闭mongodb的服务,如下图 创建以下文件夹 现在我们开启三个服务,端口号为9927做为主节点,9928做为从节点,9929做为仲裁节点 仲裁节点的作用是协调leader选举&#xff0c;监测系统运行状态&#xff0c;提供节点互相通讯的数据信息。 开启主服务: m…

【视觉高级篇】24 # 如何模拟光照让3D场景更逼真?(下)

说明 【跟月影学可视化】学习笔记。 什么是镜面反射&#xff1f; 如果若干平行光照射在表面光滑的物体上&#xff0c;反射出来的光依然平行&#xff0c;这种反射就是镜面反射。越光滑的材质&#xff0c;它的镜面反射效果也就越强&#xff0c;并且物体表面会有闪耀的光斑&…

Windows系统下HTTP(S)透明代理

本文为joshua317原创文章,转载请注明&#xff1a;转载自joshua317博客 Windows系统下HTTP(S)透明代理 - joshua317的博客 软件文档地址:goproxy/README_ZH.md at master snail007/goproxy GitHub 一、windows系统下进行下载及安装 分别有两个版本&#xff1a;proxy-admin …

Servlet学习笔记

1.在pom.xml中添加依赖 <dependencies><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><!-- 不会最终打包到服务器中去 --><scope>provided&…

SpringBoot内置tomcat启动过程及原理

作者&#xff1a;李岩科 1 背景 SpringBoot 是一个框架&#xff0c;一种全新的编程规范&#xff0c;他的产生简化了框架的使用&#xff0c;同时也提供了很多便捷的功能&#xff0c;比如内置 tomcat 就是其中一项&#xff0c;他让我们省去了搭建 tomcat 容器&#xff0c;生成 …

和年薪30W的阿里测试员聊过后,才知道自己一直在打杂...

前几天和一个朋友聊面试&#xff0c;他说上个月同时拿到了腾讯和阿里的offer&#xff0c;最后选择了阿里。 阿里内部将员工一共分为了14个等级&#xff0c;P6是资深工程师&#xff0c;P7是技术专家。 其中P6和P7就是一个分水岭了&#xff0c;P6是最接近P7的不持股员工&#x…

JavaScript-DOM操作表格

DOM操作表格的用途 DOM操作表格会在项目做数据展示的时候用到&#xff0c;其余地方使用并不多。 表格内容 <table><thead><tr><th>编号</th><th>姓名</th><th>性别</th><th>年龄</th></tr></thead…

二叉树遍历非递归算法

二叉树遍历非递归算法 文章目录二叉树遍历非递归算法二叉树的遍历一、先序遍历非递归算法算法构思&#xff1a;从先序遍历的递归算法得出循环算法的思路:下面进行框架构建:代码实操:二、中序遍历(左-根-右)非递归算法中序遍历二叉树的过程构建思路:根据以上思路&#xff0c;构建…

vscode 安装clangd插件 替代 c++自带插件

目录 1. 背景 2. 安装clangd 安装前&#xff1a;禁用c插件 2.1 clangd插件名称 2.2 安装 2.3 配置 settings.json 2.4 语言服务器下载 2.5 安装 cmake tools 2.6 设置编译选项 3. 生成 compile_command.json 4. 查看使用效果 1. 背景 vscode c开大家一般用 vscode 自家…

磨金石教育摄影技能干货分享|乡愁摄影作品欣赏

乡愁是是什么&#xff1f; 我们走在异乡的街道上&#xff0c;人声嘈杂的一瞬间&#xff0c; 或许是某个角落&#xff0c;或许是某个人的声音&#xff0c; 让你感到无比的熟悉&#xff0c;在你的记忆深处掀起了一阵阵浪花。 这个熟悉的感觉就是乡愁 它可以是家乡的一棵树 …

JUC(5) : ForkJoinPool | 线程的极致管理

一、前言 前文介绍了线程的异步编排工具类 CompletableFuture 的使用&#xff0c;使用它能够很好的完成线程任务的编排工作&#xff0c;但同时&#xff0c;我们也注意到&#xff0c;其使用的默认线程池是 ForkJoinPool.commonPool() 的方法。则这个线程池是共用的&#xff0c;…

一个普通前端的2022年终总结:多病的一年

多病 用一个词总结我的2022 &#xff0c;毫无疑问是【多病】。 翻看挂号记录&#xff0c;今年累计跑了19次医院&#xff0c;除去定期的脱发复查、尿常规复查外&#xff0c;其他还得了皮肤病、急性咽炎、筋膜炎、结膜炎、肾结石、慢性胃炎、胸闷&#xff0c;体验过了无法忍受的…

基于java+springmvc+mybatis+jsp+mysql的网络作者与美工交流平台

项目介绍 本次设计任务是要设计一个网络作者与美工交流平台&#xff0c;通过这个系统能够满足网络作者与美工交流信息的管理及版主的网络作者与美工交流信息管理功能。系统的主要功能包括&#xff1a;主页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;版主管理&#…