今天要学习的图来自2021年10月29号发表在的Nature Communication
上的一篇文章,题目是【新冠肺炎患者呼吸道菌群组成及其与宿主相互作用的临床研究】。今天先来复现其中的一幅时间线图
。
DOI:10.1038/s41467-021-26500-8
注:和 跟着Nat Commun学作图 | 1.批量箱线图+散点+差异分析不是同一篇NC,因为同为NC且以图为主故合并之。
读图
示例数据及作图前准备
导入数据
绘制
结果展示
数据及代码
后记
往期内容
该图为患者的时间线图。每行代表一个病人。黄线表示在病房,而蓝色表示在ICU。红点表示出院日期。×表示采集拭子样本进行微生物群分析的时间点。可以很直观的看出患者的纵向的一个状态。
图是由简单的点和线组成,并没有太大的难点。
由于作者给开源的数据设置了权限,这里就用timelineS
包的life_country
数据为例。
# 导入数据并查看数据集格式
library(timelineS) #没安装过的需自行安装
data(life_country)
head(life_country)
str(life_country)
> head(life_country)
Name Country Gender Phase Start End
1 Edward Australia Male A 1927-11-17 1948-01-22
2 James Australia Male A 1925-11-20 1944-01-16
3 Mark Australia Male A 1926-06-11 1948-10-25
4 Fred Australia Male A 1927-01-22 1950-04-06
5 Phil Australia Male A 1923-06-20 1947-12-29
6 Ava Australia Female A 1924-06-02 1944-01-25
> str(life_country)
'data.frame': 256 obs. of 6 variables:
$ Name : Factor w/ 62 levels "Ah","Albert",..: 13 25 41 19 48 6 15 56 7 35 ...
$ Country: Factor w/ 5 levels "Australia","China",..: 1 1 1 1 1 1 1 1 1 1 ...
$ Gender : Factor w/ 2 levels "Female","Male": 2 2 2 2 2 1 1 1 1 1 ...
$ Phase : chr "A" "A" "A" "A" ...
$ Start : Date, format: "1927-11-17" "1925-11-20" ...
$ End : Date, format: "1948-01-22" "1944-01-16" ...
library(ggplot2)
library(wesanderson) #颜色需要
ggplot(life_country, aes(x=Start, y=Name, group=Name, color=Phase)) +
scale_color_manual(values=wes_palette(n=5, name="Zissou1")[c(4,2,5,6)]) + #上色
geom_line(size=1) + #画线(即文献中的)
geom_point(shape=15, size=0.7) +#线段末尾的点(即文献中的出院点)
geom_point(aes(x=End, y=Name), color="black", size=1, shape=4) + #画点(即文献中抽样的点)
theme_bw() + #主题
scale_x_date(date_breaks = "30 year")+ #横轴的时间跨度
theme(axis.text.y=element_blank(),
axis.ticks.y=element_blank(),
axis.title = element_text(face = "bold"),
plot.title = element_text(face = "bold"),
legend.title = element_text(face = "bold")) +
labs(title = "", y="Name",
x = "Start", colour = "Phase")
ggsave(filename = "timeline.pdf", device = "pdf", width = 5, height=7) #保存为pdf
注:由于数据的原因 "出院点"被“抽样点"覆盖了,问题不大,大家根据实际的数据绘制即可。
为爱发电不易~如果需要示例数据及代码(当然其实文中都已经写的很详细了)的同学,点赞&打赏任意金额,并在主页添加本人微信(mzbj0001)发送截图即可。
关于更详细的代码讲解、作者的原代码的一些细节以及我修改的地方会在之后的视频教程中详细讲到,有兴趣的可以关注我的B站【木舟笔记】。