在发表科研论文的过程中,科研绘图是必不可少的,而提升绘图水平最直接的方法就是跟着顶刊学习。
为了便于使用,本系列文章介绍的所有绘图都已收录到了 CNSplot 项目中,获取方式:
本期我们复现的是 2022 年发表在 Journal of Pineal Research 上的一篇期刊的 Figure 1A。
我们先来欣赏下期刊的原图:
期刊原图
**原图解读:**该图是由色块图、折线图、柱状图三图组合而成的复杂图形。绘制了来自 GSE131907 和 GSE123904 中 30 例肺腺癌(lung adenocarcinoma, LUAD)患者的临床和分子特征。患者按照三个样本来源中恶性细胞数量的顺序排列。每个患者贡献的细胞比例和细胞类型用不同颜色表示。
1. 导入包
我们首先导入本期绘图用到的 R 包:
R
library(ggplot2)
library(tidyr)
library(ggnewscale)
library(patchwork)
2. 准备数据
接下来我们导入绘图用到的数据,在 CNSplot 中给大家提供了测试数据:
R
data <- read.csv("../data/001-plot/001-data.csv")
data$Sample <- factor(data$Sample, levels = data$Sample)
data1 <- data[,1:6]
data2 <- data[,c(1,7)]
data3 <- pivot_longer(data[,c(1,8:12)], !Sample, names_to = "Stage", values_to = "Value")
3. 准备配色
接下来我们设置绘图用到的配色:
R
col1 <- c("A"="#fa8b6a", "B"="#e5cf52",
"One"="#3199c2", "Two"="#ed7252", "Three"="#be599c",
"Alpha"="#e8f0e1", "Beta"="#bbd3a8", "Gamma"="#9ac190",
"a"="#f2d7b6", "b"="#fef3dd",
"CT"="#e878a9", "WT"="#feeff4")
col3 <- c("Stage1"="#ef8576", "Stage2"="#eeb570", "Stage3"="#d69faa",
"Stage4"="#84afd2", "Stage5"="#90d0c5")
4. 绘制图形
接下来我们通过下面的代码来绘制图形:
R
p1 <-
ggplot(data1, aes(x=Sample)) +
geom_tile(aes(y="Type1", fill=Type1), color="white", lwd = 0.5) +
scale_fill_manual(values = col1, guide = guide_legend(order = 1)) +
new_scale_fill() +
geom_tile(aes(y="Type2", fill=Type2), color="white", lwd = 0.5) +
scale_fill_manual(values = col1, guide = guide_legend(order = 2)) +
new_scale_fill() +
geom_tile(aes(y="Type3", fill=Type3), color="white", lwd = 0.5) +
scale_fill_manual(values = col1, guide = guide_legend(order = 3)) +
new_scale_fill() +
geom_tile(aes(y="Type4", fill=Type4), color="white", lwd = 0.5) +
scale_fill_manual(values = col1, guide = guide_legend(order = 4)) +
new_scale_fill() +
geom_tile(aes(y="Type5", fill=Type5), color="white", lwd = 0.5) +
scale_fill_manual(values = col1, guide = guide_legend(order = 5)) +
scale_y_discrete(limits=rev) +
theme_minimal(base_size = 15) +
theme(panel.grid = element_blank(), axis.text.x = element_blank(),
legend.spacing.y = unit(0.1, "cm"), legend.position = c(1.05, -0.6)) +
labs(x="", y="")
p2 <-
ggplot(data2, aes(x=Sample, y=Number, group=1)) +
geom_line(color="black", size=1.5) +
geom_point(shape=21, color="black", fill="black", size=4) +
scale_y_continuous(breaks=seq(1,12,2), limits = c(0,12),
expand = expansion(mult = c(0, 0.05))) +
theme_classic(base_size = 15) +
theme(axis.line.x = element_blank(), axis.ticks.x = element_blank(),
axis.text.x = element_blank()) +
labs(x="", y="Number")
p3 <-
ggplot(data3, aes(x=Sample, y=Value, fill=Stage)) +
geom_bar(position = "stack", stat = "identity", width = 0.7) +
scale_y_continuous(breaks=seq(0,1,0.5), limits = c(0,1),
expand = expansion(mult = c(0, 0.05))) +
scale_fill_manual(values = col3) +
theme_classic(base_size = 15) +
theme(panel.grid = element_blank(), axis.line.x = element_blank(),
axis.ticks.x = element_blank(),
axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5)) +
labs(x="", y="Proportion")
p <-
p1/p2/p3 + plot_layout(heights = c(0.7,1,1)) &
theme(legend.key.size = unit(0.4, "cm"),
legend.title = element_text(size = 12, face="bold"),
legend.text = element_text(size = 10))
p
步骤1
5. 保存图形
接下来我们通过下面的代码来保存绘制的图形:
R
ggsave("../save/001/001-figure.pdf", p, width = 10, height = 8, dpi = 300)
6. Illustrator 修饰
最后我们将保存的 pdf 文件导入 Adobe Illustrator,稍加修饰即可。AI 修饰的详细步骤见视频 video/001.mp4。
我们调整下图例的对齐和文本大小:
步骤2
完成后保存 pdf 文件,Adobe Illustrator 修饰好的绘图都保存为 pdf 文件在 CNSplot 项目的 data 文件夹中给大家提供,位于文件 data/001-plot/001-figure.pdf,通过 Adobe Illustrator 打开即可修改。
我们看一下最后的绘图效果:
绘图复现
由于绘图数据是根据原图生成的模拟数据,因此跟原图可能不完全一致,但是基本上已经成功复现了绘图。
CNSplot 介绍
CNSplot 专门针对科研绘图中的高级复杂图形,包含了以下内容:
① 50 个顶刊绘图复现,包含各种高级复杂图形

② 每个绘图都提供了测试数据/模板文件

③ 每个绘图都配套了视频教程

④ 配备一站式 html文档 ,代码一键复制 ,交互式阅读提高用户体验

往期推荐
PlotOnePiece 珍藏了 TigerZ 生信宝库的所有绘图资源,想要我的宝藏吗?我把它们全部都放在了这里🏴☠️:
TigerZ 生信宝库科研绘图资源合集 --- PlotOnePiece
CNSplot 专门针对科研绘图中的高级复杂图形,包含了 50 个顶刊绘图复现,每个绘图都提供了测试数据/模板文件 。所有绘图代码都整理到了一个 html 文档 中,并且还配套了视频教程。详细信息见:
顶刊绘图复现模板 --- CNSplot
sciRplot 项目用于解决 R 语言中科研绘图的问题,包含了 100 种绘图代码(60 种基础绘图 + 40 种进阶绘图 )。每个绘图都提供了测试数据 ,所有绘图代码都整理到了一个 html 文档中。详细信息见:
R 语言科研绘图模板 --- sciRplot
sciRcolor 项目用于解决 R 语言科研绘图中颜色选择的问题,包含了 100 种常用配色(60 种离散色 + 40 种连续色 )。并且提供了一个用来预览配色的在线网站 ,以及用来获取配色的 R 包。详细信息见:
R 语言科研配色工具 --- sciRcolor