R语言ggplot2绘制经验累积分布(empirical cumulative distribution)曲线的简单小例子

2021-04-21 15:57:42 浏览数 (1)

非常有意思的数据可视化案例 ,原文提出的问题是 学术论文中的作者数量有逐年增加的趋势 ;于是利用R语言里的 rplos 包抓取了 Plos 系列的6本期刊的2006年至2013年的每篇论文里的作者数量 进行可视化展示

原文链接是 https://benjaminlmoore.wordpress.com/2014/04/06/author-inflation-in-academic-literature/

完整的代码链接

https://github.com/blmoore/blogR

原始代码中抓取数据的部分好像不能用了,我稍微改动了一下,选取了2006年到2020年的数据,获取数据的代码这里就不放了,如果需要本文的示例数据可以知己在文末留言

数据已经存储到了文件里 首先是读取数据
代码语言:javascript复制
library(readr)
df<-read_tsv("author_number.tsv")
head(df)

image.png

期刊分别是
代码语言:javascript复制
table(df$journal)

image.png

还是Plos系列学术论文2006-2020年间作者数量的数据,这次用 经验累积分布曲线来展示数据。这个图我还是第一次听说。借助ggplot2中的stat_ecdf()函数实现

我们先来看一下帮助文档中的例子

代码语言:javascript复制
df_1 <- data.frame(
  x = c(rnorm(100, 0, 3), rnorm(100, 0, 10)),
  g = gl(2, 100)
)
p1<-ggplot(df_1, aes(x))   stat_ecdf(geom = "step")

# Don't go to positive/negative infinity
p2<-ggplot(df_1, aes(x))   stat_ecdf(geom = "step", pad = FALSE)

# Multiple ECDFs
p3<-ggplot(df_1, aes(x, colour = g))   stat_ecdf()


library(patchwork)

p1 p2 p3

image.png

这里新学到一个函数gl(),生成因子数据,比如

代码语言:javascript复制
gl(2, 8, labels = c("Control", "Treat"))

image.png

参数的意思是

  • 两种因子,每种8个,总共重复一次,因子的标签是 Control 和 Treat

之前我实现这个都是用rep()函数

再来一个例子

代码语言:javascript复制
gl(2, 1, 20)

image.png

两个因子,每种一个,重复20次

接下来用作者数据试试
代码语言:javascript复制
ggplot(df, aes(x=auth_num, col=journal))   
  stat_ecdf(geom="smooth", se=F, size=1.2)   
  theme_bw()  
  scale_x_log10(breaks=c(1:5, seq(10, 50, by=10),
                         100, 200, 300,400,500))  
  theme(legend.position=c(.75,.33),
        panel.grid = element_blank())  
  labs(x="Number of authors per paper", 
       y="ECDF",
       col="")   
  coord_cartesian(xlim=c(1,500))  
  scale_color_brewer(type="qual", palette=6)

image.png

好了,今天的内容就到这里了

欢迎大家关注我的公众号

小明的数据分析笔记本

小明的数据分析笔记本 公众号 主要分享:1、R语言和python做数据分析和数据可视化的简单小例子;2、园艺植物相关转录组学、基因组学、群体遗传学文献阅读笔记;3、生物信息学入门学习资料及自己的学习笔记!

0 人点赞