查看原文
其他

跟着 Cell 学绘图: 累计分布曲线

JunJunLab 老俊俊的生信笔记 2022-08-15


只有大公平,没有小公平

1引言

为了展示 不同处理样本整体基因的表达趋势及差异性 ,常用的展示图形为 箱线图(boxplot) 居多,此外 累积分布曲线 也经常出现,今天我们学习一下如何绘制累计分布曲线:

文章标题:

A Unified Model for the Function of YTHDF Proteins in Regulating m6A-Modified mRNA

2CDF

CDF(Cumulative Distribution Function) 为累积分布函数,描述一个变量的概率分布。把变量 从小到大排序, 每个变量对应的概率为排序位置数比上变量的总个数

R 里可以使用 ecdf 计算:

# 产生100个随机数
x <- rnorm(100)

# 计算
res <- ecdf(x)
res
Empirical CDF
Call: ecdf(x)
 x[1:100] = -2.5044, -2.3747, -2.3574,  ...2.36642.4236

# 绘图
plot(res, verticals = TRUE, do.points = FALSE)

3绘制累计分布曲线图

加载我们的测试数据,第一列为 基因名 ,后面三列为 不同的差异结果的 log2FoldChange 值 :

读取数据:

# load test data
df <- read.delim('c:/Users/admin/Desktop/cumcurve.txt',header = T)

# 查看内容
head(df,3)
  gene_name samp1_log2FC samp2_log2FC samp3_log2FC
1     Frmd5    -1.731556 -0.916402537 -0.150188905
2     Lpin1    -1.553869 -0.970210339 -1.870774938
3     Phkg1    -1.496388 -0.692395021 -2.361298684

转换数据:

# 加载R包
library(ggplot2)
library(reshape2)

# 宽转长
da <- melt(df,id.vars = c('gene_name'))
as.numeric(da$value)

# 查看内容
head(da,3)
  gene_name     variable        value
1     Frmd5 samp1_log2FC -1.731556104
2     Lpin1 samp1_log2FC -1.553868785
3     Phkg1 samp1_log2FC -1.496388283

绘图:

# 绘图
cur <- ggplot(da,aes(x = value,color = variable)) +
  # 曲线图层
  stat_ecdf(size = 1) +
  xlim(-2.5,2.5) +
  # 颜色
  scale_color_brewer(palette = 'Set1') +
  theme_classic() +
  # 细节调整
  theme(panel.border = element_rect(size = 1.7,fill = 'transparent'),
        axis.title = element_text(size = 18),
        axis.text = element_text(size = 14),
        axis.ticks.length = unit(0.35,'cm'),
        axis.ticks = element_line(size = 1),
        legend.background = element_blank(),
        legend.title = element_blank(),
        legend.position = c(0.25,0.85),
        legend.text = element_text(size = 14),
        plot.title = element_text(size = 18,hjust = 0.5)) +
  # 轴标签
  xlab('log2 FoldChange') + ylab('Cumulative Distribution')

cur

绘制箱线图:

# 绘制箱线图
box <- ggplot(da,aes(x = variable,y = value,fill = variable)) +
  # 箱线图层
  geom_boxplot(alpha = .7,show.legend = F,
               outlier.colour = 'white',
               width = .5) +
  theme_classic() + ylim(-2.5,2.5) +
  # 细节调整
  theme(axis.title.y = element_text(size = 14),
        axis.text.y = element_text(size = 10),
        axis.ticks.length.y = unit(0.25,'cm'),
        axis.ticks.y = element_line(size = 1),
        axis.text.x = element_blank(),
        axis.line.x = element_blank(),
        axis.ticks.x = element_blank(),
        axis.ticks.length = unit(0.35,'cm'),
        plot.background = element_rect(fill = 'transparent',colour = 'transparent'),
        panel.background = element_rect(fill = 'transparent',colour = 'transparent')) +
  # 颜色
  scale_fill_brewer(palette = 'Set1') +
  # 轴标签
  xlab('') + ylab('log2 FoldChange')

box

把箱线图插入曲线图层里:

# 插图
b <- ggplotGrob(box)
cur + annotation_custom(b,xmin = 1,xmax = 2.5,ymin = 0,ymax = 0.8) +
  theme(aspect.ratio = 0.75)

ok,搞定!

4晚秋冬日栖霞山

你可以热爱生活, 也可以憎恶生活,但是最终, 你, 依然是你。



欢迎加入生信交流群。加我微信我也拉你进 微信群聊 老俊俊生信交流群 哦,数据代码已上传至QQ群,欢迎加入下载。

群二维码:

老俊俊微信:


知识星球:



所以今天你学习了吗?

欢迎小伙伴留言评论!

今天的分享就到这里了,敬请期待下一篇!

最后欢迎大家分享转发,您的点赞是对我的鼓励肯定

如果觉得对您帮助很大,赏杯快乐水喝喝吧!



 往期回顾 




shinydashboard 让你制作一个酷炫的页面端

shiny 入门第四课: ui 详解

shiny 入门第三课: 进阶

寻找你心中的 TA !

shiny 入门第二课

shiny 入门第一课

DESeq2 归一化原理解析

绘制 m6A peak 在 lncRNA 上的分布

snakemake 使用多环境分析数据

跟着 Genome Research 学画图: 等高线散点图

◀...

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存