其他
跟着 Cell 学绘图: 累计分布曲线
只有大公平,没有小公平
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.3664, 2.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群,欢迎加入下载。
群二维码:
老俊俊微信:
知识星球:
所以今天你学习了吗?
欢迎小伙伴留言评论!
今天的分享就到这里了,敬请期待下一篇!
最后欢迎大家分享转发,您的点赞是对我的鼓励和肯定!
如果觉得对您帮助很大,赏杯快乐水喝喝吧!
往期回顾
◀跟着 Genome Research 学画图: 等高线散点图
◀...