抽风的ggplot2版本让我排查bug到半夜!!!

示例数据

示例数据为单细胞的两个组别 IPF vs normal 差异分组,对每个亚群做差异分析,得到的多组差异结果:

可以从这里下载:链接:

代码语言:javascript代码运行次数:0运行复制
load("diff_res.RData")
head(diff_sc)

绘图

由于搬家,自己的服务器还没有整理好,这里用了技能树的共享服务器,换了一个分析环境太难受了,要啥啥都没有准备好:

代码语言:javascript代码运行次数:0运行复制
# 使用 公共路径中的R包
.libPaths(c('~/R/x86_64-pc-linux-gnu-library/4.4',
            '/refdir/Rlib',
            '/usr/local/lib/R/library'))

# 加载包
library(ggplot2)
packageVersion("ggplot2")
library(Seurat)
library(qs)
library(tidyverse)
library(ggrepel)

然后是绘图,先对数据做一下处理:

代码语言:javascript代码运行次数:0运行复制
table(diff_sc$Group)
diff_sc <- diff_sc[abs(diff_sc$avg_log2FC)>0.58, ]
diff_sc$log10fdr <- -log10(diff_sc$p_val_adj)
# 处理一下极大值
diff_sc$log10fdr[diff_sc$log10fdr=="Inf"] <- max(diff_sc$log10fdr[diff_sc$log10fdr!=Inf])

# 获取每种细胞亚群中Top10基因:
top10 <- diff_sc %>% 
  group_by(Group) %>%
  dplyr::filter(avg_log2FC > 1) %>%
  top_n(10, abs(avg_log2FC)) %>%
  ungroup()

# 创建自定义色板:
mycol <- c('#b12d30', '#43b5e6', '#93ba1f', '#58ac41', '#f0bbcb','#f1aa41'
           ,"#6cc3b9","#fc3c46","#b76f9e","#3568a3","#f66464")

开始绘图:

代码语言:javascript代码运行次数:0运行复制
# 基础火山图
p <- ggplot() +
  geom_point(data = diff_sc, aes(x = avg_log2FC, y = log10fdr),size = 0.8, color = 'grey') +
  coord_flip() + # 坐标轴翻转
  facet_grid(. ~ Group,scales = "free") + # 一行多列;
  geom_point(data = top10, aes(x = avg_log2FC, y = log10fdr,color = Group)) + # 添加top点颜色
  geom_vline(xintercept = c(-0.58, 0.58), size = 0.5, color = "grey50", lty = 'dashed')+ #添加阈值线
  scale_color_manual(values = mycol) #+ #更改配色
  theme_bw()+
  theme( legend.position = 'none', #去掉图例
    panel.grid = element_blank(), #去掉背景网格
    axis.text = element_text(size = 10), #坐标轴标签大小
    axis.text.x = element_text(angle = 45, vjust = 0.8), #x轴标签旋转
    strip.text.x = element_text(size = 10, face = 'bold') #加粗分面标题
  )

# 添加基因symbol
p + 
  geom_text_repel(
    data = top10,
    aes(x = avg_log2FC, y = log10fdr, label = gene, color = Group),
    fontface = 'italic',
    seed = 233,
    size = 3,
    min.segment.length = 0,  # 始终为标签添加指引线段
    force = 12,  # 重叠标签间的排斥力
    force_pull = 2,  # 标签和数据点间的吸引力
    box.padding = 0.1,  # 标签周边填充量
    max.overlaps = Inf,  # 始终显示所有标签
    segment.linetype = 3,  # 线段类型
    segment.alpha = 0.5,  # 线段不透明度
    direction = "y",  # 按 y 轴调整标签位置方向
    hjust = 0,  # 0 右对齐,1 左对齐,0.5 居中
    point.padding = 0.5,  # 增加点和标签之间的间距
    nudge_x = 0.05,  # 在 x 轴方向上微调标签位置
    nudge_y = 0.05  # 在 y 轴方向上微调标签位置
  )

结果如下:

你就会发现,好好的也没有重叠在一起,怎么就有的亚群可以显示基因symbol,有的就不显示呢!

就在我查代码查的快疯了的时候,突然想起来之前有一次绘图,跟张俊交流过一些问题,上一次交流的时候是ggplot2的两个参数我查到明明有,但是用的时候一直提示我不对!然后他问我的ggplot2版本是哪个?他专门订阅了github上每一个ggplot2的更新消息,让我安装github上最新的版本!

我灵光一闪,会不会是这次也是ggplot2的版本有问题呢?!

先看一下现在的ggplot2版本:3.5.1

代码语言:javascript代码运行次数:0运行复制
library(ggplot2)
packageVersion("ggplot2")
# ‘3.5.1’

然后火速的去github下载最新版本,安装:

代码语言:javascript代码运行次数:0运行复制
.libPaths()

# 安装
devtools::install_local("ggplot2-main.zip")
packageVersion("ggplot2")
# [1] ‘3.5.2.9000’

github上走在最前沿:到了3.5.2.9000版了!

然后回去重新绘图,同样的代码,但是需要重启Rstudio,加载新的ggplot2

代码语言:javascript代码运行次数:0运行复制
.libPaths("/home/data/t020448/miniconda3/envs/R4.4/lib/R/library")
.libPaths()

library(ggplot2)
packageVersion("ggplot2")
# [1] ‘3.5.2.9000’
library(Seurat)
library(qs)
library(tidyverse)
library(ggrepel)

重新走上面的代码,结果如下:

洗洗睡了!明天又是一条好汉,还有那么多答疑等着我!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-04-23,如有侵权请联系 cloudcommunity@tencent 删除ggplot2服务器数据bugdiff