跟着Nature学分析:R语言ggplot2包绘制高端组合图

ops/2024/11/15 8:29:52/

数据和代码获取:请查看主页个人信息!!!

图片

大家好,今天我将介绍高分杂志组合图绘制,图形来源于Nature的一篇文章:

图片

图片

该图展示了转录组多样性的主成分(PCs)与基因组(黑色标签)和临床(蓝色标签)变量之间的关系。原文使用混合效应线性模型进行显著性的确定,感兴趣的同学可以进行深入学习。

本文主要对可视化方法进行展示,话不多说,我们直接开始:

Step1:数据载入

rm(list=ls())pacman::p_load(tidyverse,aplot,ggtext)data <- read.csv('data.csv', row.names = 1)

大家可以看到:原文图中有三组Y文本非黑色字体,这个并非P图实现,而是通过【ggtext包】实现,因此我们在绘图前需要对数据分组颜色进行赋值。

图片

Step2:定义Y轴字体颜色

d <-  data %>%   filter(variable_type %in%  c("genomic", "clinical")) %>%   mutate(axis_cols = if_else(variable_type == "clinical",                             true = "#3399FF",                             false = "black")) %>%   mutate(y_labels = paste0("<span style='color: ",                            axis_cols,                           ";'>",                            variable,                            "</span>")) %>%   group_by(variable) %>%   filter(!all(is.na(get('log_pval'))))
d[, c('axis_cols', 'y_labels')]

"<span style='color: ", axis_cols, ";'>", variable, "</span>" 是一段用于创建一个带有指定颜色的标签。axis_cols 是指颜色,variable 表示要显示的标签文本。通过将这两个变量与一些HTML标签和样式属性组合在一起,可以生成一个具有指定颜色的标签。在这个特定的代码段中,使用了 <span> 标签和 color 样式属性来设置标签的颜色。

图片

Step3:绘制主热图

p1 <- ggplot(d, aes(x = pc_label, y = y_labels, fill = log_pval)) +  geom_tile(aes(color = effect_direction, width = 0.9, height = 0.9), size = 1) +  facet_grid(. ~ histology, scales = "free") +  scale_fill_gradient(low = "#edf8fb", high = "#006d2c", na.value = "white",                      name = '-log pval') +  scale_color_manual(values = c("blue3", "red3"), name = "Association",                     na.value = "white", na.translate = FALSE) +  theme_bw() +  theme(axis.text.x = element_blank(),        axis.title.x = element_blank(),        axis.ticks.x = element_blank(),        axis.text.y = element_markdown(size = 13),        axis.title.y = element_blank(),        legend.title = element_text(size = 14),        legend.text = element_text(size = 13),        panel.grid.major = element_blank(),        panel.grid.minor = element_blank(),        strip.background = element_rect(fill = "white"),        strip.text = element_text(size = 13),        legend.position = 'right',        legend.key.size= unit(0.4, 'cm'))p1

上面代码中【ggtext包的element_markdown】函数,实现了Y轴字体颜色的映射,这是一个很好的绘图技巧,能增加图形的美观程度。

图片

Step4:绘制子图

p2 <- ggplot(d, aes(x = pc_label, y = median_ratio_var)) +   geom_point(size = 1) +  theme_bw() +  scale_y_continuous(breaks = scales::pretty_breaks(n = 3)) +  facet_grid(. ~ Histology, scales = "free") +  ylab("Intra/inter-tumour\nvariance in\nPC amplitude") +  theme(axis.text.x=element_text(angle=45,vjust=1, hjust=1),        axis.title.x = element_blank(),        axis.text.y = element_text(size = 13),        axis.title.y = element_text(size = 10, angle=0, vjust=0.5),        legend.title = element_text(size = 14),        legend.text = element_text(size = 13),        strip.background = element_blank(),        strip.text = element_blank(),        panel.grid.major = element_blank(),        panel.grid.minor = element_blank(),        plot.margin = unit(c(0, 0, 0, 0), "null"))p2

图片

Step5:拼图

p1 %>%   insert_bottom(p2, height = 0.2)ggsave('pic1.pdf', width = 9, height = 7)

图片

当然,我们也可以在原图的基础上,进一步展示更多数据内容:

Step6:个性化延伸

p3 <-   ggplot(d, aes(x = y_labels, y = r_marg, color = r_marg, fill = r_marg), size = abs(r_marg)) +   geom_boxplot(width = 0.35, color = 'grey50') +  geom_point(size = 1) +  coord_flip() +  ggsci::scale_fill_material("blue") +  ggsci::scale_color_material("blue") +  xlab('') +  labs(fill = 'Correlation', color = 'Correlation', title = 'Correlation') +  scale_y_continuous(breaks = scales::pretty_breaks(n = 3)) +  theme_bw() +  theme(axis.text.x=element_text(angle=45,vjust=1, hjust=1),        axis.title.x = element_blank(),        axis.ticks.y = element_blank(),        axis.text.y = element_blank(),        axis.title.y = element_text(size = 10, angle=0, vjust=0.5),        legend.title = element_text(size = 14),        legend.text = element_text(size = 13),        strip.background = element_blank(),        strip.text = element_blank(),        panel.grid.major = element_blank(),        panel.grid.minor = element_blank(),        plot.margin = unit(c(0, 0, 0, 0), "null"),        legend.key.size= unit(0.4, 'cm'))p3
p1 %>%   insert_bottom(p2, height = 0.2) %>%   insert_right(p3, width = 0.2)
ggsave('pic2.pdf', width = 10, height = 7)

图片

好啦,本期分享就到这里啦!喜欢本期内容的童鞋们后台回复“相关性组合图”获得本期代码和数据。


http://www.ppmy.cn/ops/47650.html

相关文章

【全开源】在线题库微信小程序系统源码(ThinkPHP+FastAdmin+UniApp)

打造个性化学习平台 一、引言&#xff1a;在线学习的未来趋势 在数字化时代&#xff0c;线上学习已逐渐成为主流。随着移动互联网的普及&#xff0c;小程序以其轻便、快捷、无需安装的特点&#xff0c;成为用户日常学习的新选择。为了满足广大用户对于在线学习的需求&#xf…

大归纳!!教你使用<string.h>的字符函数与字符串函数!!☑

这篇博客为你归纳了所有的字符函数和最常用的字符串函数&#xff0c;以及对应的模拟实现&#xff01;&#xff01;你可以直接循着目录跳到你需要的段落哦&#xff01;&#xff01;&#x1f60d; 目录 字符函数 字符分类 字符判断函数 islower——判断小写字母 isupper——…

【Sklearn | 2】sklearn 高级教程

在上一篇基础教程中&#xff0c;我们介绍了 sklearn 的基础使用方法。本文将进一步深入&#xff0c;介绍一些高级功能和技巧&#xff0c;包括管道、特征工程、模型选择与评估、以及集成方法等。 管道&#xff08;Pipeline&#xff09; 在实际项目中&#xff0c;数据预处理和模…

jenkins应用2-freestyle-job

1.jenkins应用 1.jenkins构建的流程 1.使用git参数化构建&#xff0c;用标签区分版本 2.git 拉取gitlab远程仓库代码 3.maven打包项目 4.sonarqube经行代码质量检测 5.自定义制作镜像发送到远程仓库harbor 6.在远程服务器上拉取代码启动容器 这个是构建的整个过程和步骤…

json和axion结合

目录 java中使用JSON对象 在pom.xml中导入依赖 使用 public static String toJSONString(Object object)把自定义对象变成JSON对象 json和axios综合案例 使用的过滤器 前端代码 响应和请求都是普通字符串 和 请求时普通字符串&#xff0c;响应是json字符串 响应的数据是…

Java基础27,28(多线程,ThreadMethod ,线程安全问题,线程状态,线程池)

目录 一、多线程 1. 概述 2. 进程与线程 2.1 程序 2.2 进程 2.3 线程 2.4 进程与线程的区别 3. 线程基本概念 4.并发与并行 5. 线程的创建方式 方式一&#xff1a;继承Thread类 方式二&#xff1a;实现Runable接口 方式三&#xff1a;实现Callable接口 方式四&…

从功能性磁共振成像(fMRI)数据重建音频

听觉是人类最重要的感官之一&#xff0c;它负责接收外部的听觉刺激&#xff0c;并将这些信息传递给大脑进行处理和理解。研究人员正致力于从神经科学和计算机科学两个领域探索人脑的听觉感知机制。一个关键目标是从人脑中解码神经信息&#xff0c;并重建原始的刺激。常见的大脑…

【scikit-learn010】sklearn算法模型清单实战及经验总结(已更新)

1.一直以来想写下基于scikit-learn训练AI算法的系列文章,作为较火的机器学习框架,也是日常项目开发中常用的一款工具,最近刚好挤时间梳理、总结下这块儿的知识体系。 2.熟悉、梳理、总结下scikit-learn框架模型算法包相关技术点及经验。 3.欢迎批评指正,欢迎互三,跪谢一键…