跟着iMeta学做图|双侧柱状图展示具有正负相关性的类型数量

源代码已经上传至https://github.com/iMetaScience/iMetaPlot/tree/main/230130barplot 如果你使用本代码,请引用:Changwu Wu. 2022. Pan-cancer analyses reveal molecular and clinical characteristics of cuproptosis regulators. iMeta 1: e68. https://doi.org/10.1002/imt2.68

代码编写及注释:农心生信工作室

写在前面

柱状图 (bar plot) 及其衍生图是最常见的绘图模式,能够描述多种类型数据。本期我们挑选2022年12月5日刊登在iMeta上的Pan-cancer analyses reveal molecular and clinical characteristics of cuproptosis regulators - iMeta|湘雅医院刘庆组-泛癌分析揭示铜死亡调节子的临床和分子特征,选择文章的Figure 7B进行复现,基于ggplot2包,讲解和探讨双侧柱状图的绘制方法,先上原图:

702cf0bd3de1c36ee7483896e2910501.gif

7e83fe71c606fe5cbdc7aa6c8809af15.jpeg

接下来,我们将通过详尽的代码逐步拆解原图,最终实现对原图的复现。

R包检测和安装

01

安装核心R包ggplot2以及一些功能辅助性R包,并载入所有R包。

if (!require("ggplot2"))
  install.packages('ggplot2') 
if (!require("patchwork"))
  install.packages('patchwork') 
# 加载包
library(ggplot2)
library(patchwork)

生成测试数据

02

观察原图,正负两种相关性分别用不同颜色柱状图表示,因此我们的思路是先绘制两幅柱状图,再将柱状图拼接起来。这需要随机生成两个数据框。

set.seed(123)
df_negative <- data.frame(pathway = paste("pathway", c(1:15)), num = sample(11, 15, replace = T))
df_positive <- data.frame(pathway = paste("pathway", c(1:15)), num = sample(11, 15, replace = T))

作图预览

03

开始作图,先绘制左半边柱状图。该图需要反转x轴y轴,并颠倒柱子方向:

p1 <- ggplot(df_negative)+
  geom_bar(aes(x = pathway, y = num), stat = "identity", fill = "#00BCD4") +
  coord_flip()+ #反转x轴和y轴
  scale_y_reverse(expand = expansion(0))+ #颠倒y轴,并将y轴与边框距离缩小为0
  ggtitle("Negative correlation")+
  theme(axis.title = element_blank(), #去除轴标题
        panel.background = element_blank(), #去除背景
        panel.grid = element_line (colour = "lightgrey"), #设置网格线颜色
        panel.border = element_rect(fill = NA, colour = "black", linewidth = 0.5), #设置背景边框
        plot.title = element_text(size = 12, hjust = 0.5)) #设置主标题字体大小并让标题居中

c695e6236b570801886bbfe0e6c17ba3.png

04

再绘制右半边柱状图。该图仅需要反转x轴y轴,不需要颠倒柱子方向:

p2 <- ggplot(df_positive)+
  geom_bar(aes(x = pathway, y = num), stat = "identity", fill = "#E64A19") +
  coord_flip()+ #反转x轴和y轴
  scale_y_continuous(expand = expansion(0))+
  ggtitle("Positive correlation")+ #添加主标题
  theme(axis.text.y = element_blank(), #去除y轴刻度文本
        axis.ticks.y = element_blank(), #去除y轴刻度
        axis.title = element_blank(), 
        panel.background = element_blank(), #去除背景
        panel.grid = element_line (colour = "lightgrey"), #设置网格线颜色
        panel.border = element_rect(fill = NA, colour = "black", linewidth = 0.5), #设置背景边框
        plot.title = element_text(size = 12, hjust = 0.5)) #设置主标题字体大小并让标题居中

02b0b24c8babcd3c81465c5a3286c600.png

05

利用patchwork包合并左右两幅图片:

#合并图片,添加一个脚注释  
p <- p1+p2+plot_annotation(caption = 'Number of cancer type')

3a6e5be874e0dd53ee2cf28ff13952e3.png

06

我们需要用AI微调,将两幅图之间缝隙消除。成品图如下:

1c1af3aa72dd0cfc4b05a8bd4ee1d163.jpeg

完整代码

if (!require("ggplot2"))
  install.packages('ggplot2') 
if (!require("patchwork"))
  install.packages('patchwork') 
# 加载包
library(ggplot2)
library(patchwork)


set.seed(123)
df_negative <- data.frame(pathway=paste("pathway",c(1:15)),num=sample(11,15,replace = T))
df_positive <- data.frame(pathway=paste("pathway",c(1:15)),num=sample(11,15,replace = T))


p1 <- ggplot(df_negative)+
  geom_bar(aes(x = pathway, y = num), stat = "identity", fill = "#00BCD4") +
  coord_flip()+ #反转x轴和y轴
  scale_y_reverse(expand = expansion(0))+ #颠倒y轴,并将y轴与边框距离缩小为0
  ggtitle("Negative correlation")+
  theme(axis.title = element_blank(), #去除轴标题
        panel.background = element_blank(), #去除背景
        panel.grid = element_line(colour = "lightgrey"), #设置网格线颜色
        panel.border = element_rect(fill = NA, colour = "black",linewidth=0.5),#设置背景边框
        plot.title = element_text(size = 12, hjust = 0.5)) #设置主标题字体大小并让标题居中


p2 <- ggplot(df_positive)+
  geom_bar(aes(x = pathway,y=num),stat = "identity", fill = "#E64A19") +
  coord_flip()+ #反转x轴和y轴
  scale_y_continuous(expand = expansion(0))+
  ggtitle("Positive correlation")+ #添加主标题
  theme(axis.text.y = element_blank(),
        axis.ticks.y = element_blank(),
        axis.title = element_blank(),
        panel.background = element_blank(), #去除背景
        panel.grid = element_line (colour = "lightgrey"), #设置网格线颜色
        panel.border = element_rect(fill = NA, colour = "black",linewidth=0.5),#设置背景边框
        plot.title = element_text(size = 12, hjust = 0.5)) #设置主标题字体大小并让标题居中


#合并图片,添加一个脚注释
pdf("Figure 7B.pdf", width = 7, height = 5)
p1+p2+plot_annotation(caption = 'Number of cancer type')
dev.off()
#> quartz_off_screen 
#>                 2

以上数据和代码仅供大家参考,如有不完善之处,欢迎大家指正!

更多推荐

(▼ 点击跳转)

高引文章 ▸▸▸▸

iMeta | 德国国家肿瘤中心顾祖光发表复杂热图(ComplexHeatmap)可视化方法

42bae2167e359c1d47a49994ed590128.png

▸▸▸▸

iMeta | 浙大倪艳组MetOrigin实现代谢物溯源和肠道微生物组与代谢组整合分析

7387fffe6fd2b5511fa41d6ba1098ac2.png

▸▸▸▸

iMeta | 高颜值绘图网站imageGP+视频教程合集                                        

ecffea85d741adc71a8272b934f8d75a.png

37548148e9196ad80895d8d62c69ca77.jpeg

第1卷第1期

ac6b66ff64dc499ddab720f17f7fe501.jpeg

第1卷第2期

8030e6f69991596abe0796bf218264f2.jpeg

第1卷第3期

5b440f4d88432c6b75c6349ee6c64827.jpeg

第1卷第4期

期刊简介

“iMeta” 是由威立、肠菌分会和本领域数百位华人科学家合作出版的开放获取期刊,主编由中科院微生物所刘双江研究员和荷兰格罗宁根大学傅静远教授担任。目的是发表原创研究、方法和综述以促进宏基因组学、微生物组和生物信息学发展。目标是发表前10%(IF > 15)的高影响力论文。期刊特色包括视频投稿、可重复分析、图片打磨、青年编委、前3年免出版费、50万用户的社交媒体宣传等。2022年2月正式创刊发行!

联系我们

iMeta主页:http://www.imeta.science

出版社:https://onlinelibrary.wiley.com/journal/2770596x
投稿:https://mc.manuscriptcentral.com/imeta
邮箱:office@imeta.science

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值