跟着iMeta学做图|ggplot2包绘制棒棒糖图展示变量间的相关性

如果你使用本代码,请引用:Changwu Wu. 2022. Pan-cancer analyses reveal molecular and clinical characteristics of cuproptosis regulators. iMeta 1: e68.  https://doi.org/10.1002/imt2.68

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

写在前面

气泡图 (bubble map) 具有多种衍生的形式,在气泡图中加入线段可以展现一些变量之间的相关性。本期我们挑选2022年12月5日刊登在iMeta上的Pan-cancer analyses reveal molecular and clinical characteristics of cuproptosis regulators- iMeta|湘雅医院刘庆组-泛癌分析揭示铜死亡调节子的临床和分子特征,选择文章的Figure 9A进行复现,基于ggplot2包,讲解和探讨棒棒糖图的绘制方法,先上原图:

图片

图片

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

R包检测和安装

01

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

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

生成测试数据

02

原图表示铜死亡活性与药物敏感性(IC50值)之间的相关性。每一行代表一种药物和药物靶标。线的长度代表相关系数。点的大小代表统计学意义,点越大,统计学显著性越高。我们根据原图特征生成测试数据test.CSV。相关示例数据可以在GitHub上下载: https://github.com/iMetaScience/iMetaPlot/tree/main/221220Lollipops

#读取test.CSV对应表df <- read.csv("test.CSV",header = T)#固定列的顺序df$Drug <- factor(df$Drug,levels = df$Drug)df$Target <- factor(df$Target,levels = df$Target)df$Target.Pathway <- factor(df$Target.Pathway,levels = df$Target.Pathway)

图片

作图预览

03

开始作图,首先根据Grug一列做y轴,画一个最基本的气泡图:

p1 <- ggplot(df,aes(Correlation,Drug))+  geom_point(aes(size = pvalue),color = "skyblue")

图片

04

添加线段,这里使用的关键函数是geom_segment,它可以通过映射x坐标和y坐标的起点终点,最终得到有方向由长度的向量。本例中所有线段都是垂直与x轴,长度代表相关性,因此需要先根据相关性生成一个包括x和y终点和起点的数据框:

#生成线段数据框segment_df <- data.frame(x = 0,y = seq(1:15),xend = df$Correlation,yend = seq(1:15))p1 <- ggplot(df,aes(Correlation,Drug))+  geom_point(aes(size = pvalue),color = "skyblue")+  geom_segment(segment_df,mapping = aes(x = x, y = y, xend = xend, yend = yend),size = 0.8,color = "skyblue")

图片

05

调整参数美化图片:

p1 <- ggplot(df,aes(Correlation,Drug))+  geom_point(aes(size = pvalue),color = "skyblue")+  geom_segment(segment_df,mapping = aes(x = x, y = y, xend = xend, yend = yend),size = 0.8,color = "skyblue")+  scale_x_continuous(limits = c(0,0.152), #设置x轴范围                     expand = expansion(mult = 0))+ #expansion函数的参数mult: 百分比间距,可以接受一个向量  theme(panel.background = element_blank(), #删除背景        panel.grid = element_line (colour = "lightgrey"), #设置网格颜色        panel.border = element_rect(fill = NA,colour = "black",size = 0.8))+ #设置边框  ylab("") #删除y轴名

图片

06

通过ggplot2绘制两幅只显示Target.Pathway和Target列名的图片,最后通过cowplot包将所有图片组合。

#Targetp2 <- ggplot(df,aes("",Target))+  theme(panel.background = element_blank(),#去除背景        panel.border = element_blank(), #去除边框        axis.ticks.y = element_blank(), #去除y轴刻度        axis.ticks.x = element_blank())+ #去除x轴刻度  xlab("")+ #去除x轴标题  ylab("")+ #去除y轴标题  coord_fixed(ratio = 10) #将y轴和x轴标度比例设置为10:1#Target.Pathway,同上p3 <- ggplot(df,aes("",Target.Pathway))+  theme(panel.background = element_blank(),#去除背景        panel.border = element_blank(),        axis.ticks.y = element_blank(),        axis.ticks.x = element_blank())+  xlab("")+  ylab("")+  coord_fixed(ratio = 10)
p <- plot_grid(p3,p2,p1,             ncol = 3, #三张图片分三列合并             rel_widths = c(1,1,2), #三列所占比例为1:1:2             labels = c("Target.Pathway","Target","Drug"), #每一幅子图片标题名             label_size = 8) #标题大小

图片

完整代码

if (!require("ggplot2"))  install.packages('ggplot2') if (!require("cowplot"))  install.packages('cowplot') # 加载包library(ggplot2)library(cowplot)
#读取test.CSV对应表df <- read.csv("test.CSV",header = T)#固定列的顺序df$Drug <- factor(df$Drug,levels = df$Drug)df$Target <- factor(df$Target,levels = df$Target)df$Target.Pathway <- factor(df$Target.Pathway,levels = df$Target.Pathway)
#生成线段数据框segment_df <- data.frame(x = 0,y = seq(1:15),xend = df$Correlation,yend = seq(1:15))
p1 <- ggplot(df,aes(Correlation,Drug))+  geom_point(aes(size = pvalue),color = "skyblue")+  geom_segment(segment_df,mapping = aes(x = x, y = y, xend = xend, yend = yend),size = 0.8,color = "skyblue")+  scale_x_continuous(limits = c(0,0.152), #设置x轴范围                     expand = expansion(mult = 0))+ #expansion函数的参数mult: 百分比间距,可以接受一个向量  theme(panel.background = element_blank(), #删除背景        panel.grid = element_line (colour = "lightgrey"), #设置网格颜色        panel.border = element_rect(fill = NA,colour = "black",size = 0.8))+ #设置边框  ylab("") #删除y轴名
#Targetp2 <- ggplot(df,aes("",Target))+  theme(panel.background = element_blank(),#去除背景        panel.border = element_blank(), #去除边框        axis.ticks.y = element_blank(), #去除y轴刻度        axis.ticks.x = element_blank())+ #去除x轴刻度  xlab("")+ #去除x轴标题  ylab("")+ #去除y轴标题  coord_fixed(ratio = 10) #将y轴和x轴标度比例设置为10:1#Target.Pathway,同上p3 <- ggplot(df,aes("",Target.Pathway))+  theme(panel.background = element_blank(),#去除背景        panel.border = element_blank(),        axis.ticks.y = element_blank(),        axis.ticks.x = element_blank())+  xlab("")+  ylab("")+  coord_fixed(ratio = 10)
pdf("Figure 9A.pdf",width = 11, height = 5.7)plot_grid(p3,p2,p1,          ncol = 3, #三张图片分三列合并          rel_widths = c(1,1,2), #三列所占比例为1:1:2          labels = c("Target.Pathway","Target","Drug"), #每一幅子图片标题名          label_size = 8) #标题大小dev.off()#> quartz_off_screen #>                 2

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生信宝典

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值