origin如何绘制多条折线_36分文章的折线图该怎么画?

本文介绍了如何使用Origin和ggplot2软件绘制类似Nature medicine上美观的富集分析折线图。通过Origin的Plot Setup、Plot Details等设置调整散点、线条和标签,以及ggplot2的geom_line、geom_point和geom_segment方法创建图表,再利用ggrepel包解决标签重叠问题,实现专业图表的绘制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

c603e9f3fc1f2756e492c85dea46ed85.png

实用科研工具推荐 、详实生信软件教程分享、前沿创新组学文章解读、独家生信视频教程发布,欢迎关注微信公众号:基迪奥生物 (gene-denovo

|本文作者:莫北


前段时间看到Nature medicine上的一个富集分析折线图(如下),非常漂亮,心仪不已。

1af06610db74852a7689f30e0f29f505.png
(Nature medicine, 2020)

如果直接将基因集富集分析(GSEA)输出结果图放在文章中,就显得非常“粗糙”了,高下立判!那么这样的折线图如何绘制呢?

其实并不难,常规科研作图软件也可以画。闲言少叙,下面就开始介绍具体的画法,内容包括基于Origin、ggplot2的绘图方法和绘图数据准备


| Origin绘制法

首先,用Excel打开GSEA分析结果中需要重绘的基因集作图数据,在原数据的基础上新增Label列,填入自己感兴趣的基因,如下图。

8644d5fff7b17a22091478a2433ba611.png

然后将范例数据复制粘贴到Origin(版本Origin 2021)中表格中,通过Plot/Basic 2D/Color Mapped绘制散点图,如下图。

7f76390a3b16df6191c1843f143c9937.png

在Plot Setup窗口,给X轴、Y轴、映射颜色(C)、标签(L)选择绘图数据,方法如下,点OK按钮完成绘制。

1519dea46e4c294f134a3e6721de9d9d.png

初始的结果如下:

3cd65a71bf976c91d944e17ade12fb97.png

双击图表,在Plot Details窗口的Symbol选项下可调整散点的形状,大小(Size),Plot Type,如下。

0e43685976fc02892be8ffbfe44d82c5.png

接续在Line选项下调整连线的粗细和渐变色,方法如下。

374110abdc4c6ca994d722a3b38fa5d0.png

接着,在DropLines选项下勾选Vertical,并重新设置渐变颜色,如下。

73f5f77f37811e3a571d6190c562b52c.png

最后,在label选项下调整字体的大小,我这里设为8pt,同时设置标签的位置和指引线,勾选标签避免重叠,具体参数设置如下图。

fa03f3e2c0cc60b92781a44c719aaf07.png

调整后的效果如下:

1aa46730b7c7f5ef74318d726b472e00.png

aa7d7b3ceaea6d6a01c51040b09ef023.png

如果觉得颜色数量太多了,可双击图表,在Plot Details窗口调整配色,比如我这里设为“黄色-青色”渐变。

a92d488e1cdf5a15247fba612c9b1918.png

连续点击peak基因对应的散点3次,可单独对某个点进行调整,比如我这里将散点和drop line的颜色设置为橙色。

d4796a161fab15cd453e0bb6f4e5824a.png

调整后的效果如下:

f029d758698b81ddac7771a3fca070b4.png

b16c6505c154f33c717daafd288a7089.png

| ggplot2绘制法

关于绘制原理,主要是使用ggplot2包绘制折线图(geom_line+geom_point),然后再为每个散点添加竖线(geom_segment)。下面就先读入范例数据,载入ggplot2包,开始绘制吧。

#改变工作目录;
setwd("C:/Users/MHY/Desktop/GSEA结果重绘")
#读入GSEA结果数据;
df <- read.table("KEGG_PURINE_METABOLISM.xls",header = T,sep = 't')
head(df)
#载入ggplot2包;
library(ggplot2)
#建立映射,绘制图形区;
p<- ggplot(df, aes(x=RANK.IN.GENE.LIST,
y=RUNNING.ES,
colour=RANK.METRIC.SCORE))
p1 <- p + geom_line(size=0.5) + geom_point(size=0.5)
p1

e82c3a0ea32d4b18411db321b0773d32.png
#添加竖线;
p2 <- p1 + geom_segment(data=df,
aes(xend=RANK.IN.GENE.LIST, yend=0), size=0.4)
p2

de7d8d2ef5a36e7ddd4030685dff0194.png
#使用2种渐变色;
p3 <- p2+scale_color_gradient(low = "cyan", high = "yellow",
guide=guide_colorbar(title="Rank",
title.position="top",
barwidth=0.7,
barheight = 5,
frame.colour = NULL,
ticks = T))
p3

023f0d2c4e2a6e55115c0c2dca6668f6.png
#使用多种渐变色;
p3 <- p2 + scale_color_gradientn(
colours = rainbow(6),
guide=guide_colorbar(title="Rank",
title.position="top",
barwidth=0.7,
barheight = 5,
frame.colour = NULL,
ticks = T))
p3

09ef948cdd27c4626e2d2fc418f8ceb7.png
#提取核心基因集(leading edge genes);
df_genes <- subset(df,CORE.ENRICHMENT=="Yes")
head(df_genes)
#提取peak基因;
peak <- tail(df_genes,1)
#突出展示peak基因;
p4 <- p3 + geom_point(data=peak,
aes(x=RANK.IN.GENE.LIST,y=RUNNING.ES),
colour="tomato", alpha=1, size=1) +
geom_segment(data=peak,
aes(xend=RANK.IN.GENE.LIST, yend=0),
size=0.5, colour="tomato")
p4

3d71eec395a92abf9b468ce511294cf9.png

接下来使用ggrepel包为图表添加文字标签和指引线,关于这个包的详细用法可参考之前的文章:

基迪奥生物:标签糊成一坨?如何为图表添加“帅帅”的指引线?​zhuanlan.zhihu.com
28e4578f2058ad28f5eb0e8e0c029404.png
library(ggrepel)
#指引线的参数设置;
leader.size <- 2
leader.color <- "grey10"
leader.alpha <- 0.9
p5 <- p4 + geom_text_repel(data=df_genes,
aes(x=RANK.IN.GENE.LIST,y=RUNNING.ES,label=SYMBOL),
lineheight=0.8,
size=leader.size,
color=leader.color,
alpha=leader.alpha,
fontface='italic',
box.padding=unit(0.5,"lines"),
segment.color='grey30',
segment.alpha=0.5,
segment.size=0.5)
p5

a6d14da8824531a19291c00bbf2a33d1.png
#添加带箭头的指引线;
p6 <- p4+geom_text_repel(data=df_genes,
aes(x=RANK.IN.GENE.LIST,y=RUNNING.ES,label=SYMBOL),
force=0.3,
color=leader.color,
size=leader.size,
fontface='italic',
point.padding = 0.5,
hjust = 0.5,
arrow = arrow(length = unit(0.01,"npc"), type ="open", ends ="last"),
segment.color=leader.color,
segment.size=0.2,
segment.alpha=leader.alpha,
nudge_y=0)
p6

a9e6c2c7f36215c8700b249b6c77aaad.png

我们可以发现,大量的文字标签都堆积在图表的左半部分,即便使用ggrepel包,仍有部分标签重叠在一起,而且,整个图表我们最关心的是leading edge。如何突出展示这一区域呢?

你可以像范例文献那般,只绘制这一区域的基因,还可以对整个gene set的rank值取对数,对这一区域进行视觉“放大”。

#将x坐标轴转换为对数型坐标轴;
library(scales)
x <- .x <- NULL
#对坐标轴进行log10对数转化;
p7 <- p6 + scale_x_log10(breaks=trans_breaks("log10", function(x) 10^x, n=4), labels = trans_format("log10",math_format(10^.x)))+
scale_y_continuous(limits = c(0, 0.42),expand = c(0.001,0))
p7

取对数后的作图效果如下:

121cfd9fe8211b3a3f194e67ca6ef8f2.png
#修改主题样式;
p8 <- p7 + theme_classic() +
theme(axis.title=element_text(color="black"),
axis.text =element_text(color="black"),
legend.title = element_text(size = 8),
axis.line =element_line(size = 0.5))
pic <- p8+xlab("Gene ranks") + ylab("Running enrichment score")
pic

最终的绘图效果如下:

7c5ec76a739979e11ed4b77cd0702cfa.png

| 作图数据准备

本文的范例数据来自OmicShare GSEA工具的分析结果,具体获得过程请参考《高端的GSEA往往只需采用最简单的分析工具》一文。我这里仅从分析结果中随便选了一个基因集的作图数据(即KEGG_PURINE_METABOLISM.xls)进行重新绘制,如下图。

e82e67d678fe7e4b01930bf552b163eb.png

当然如果想绘制ES组合图下方的排序得分柱状图,可以使用的“ranked_gene_list.xls”文件进行绘制,如下。

08a3e55808c4854c496ef0220cf9028f.png

具体可绘制出这样的柱状图:

8add935116f6f12e421e4f23208a6691.png

所有组合图下半部分的柱状图都是相同的,因此,只绘1个即可。然后,与其他的基因集ES折线图进行组合,效果如下:

427a949fa14ad0a2a223702d6d7328cb.png

好啦,如果你还不会做基因集富集分析(GSEA),可试试OmicShare新推出的两款在线小工具,数据准备方法简单,除了人,还支持水稻、拟南芥等多种模式生物!

OmicShare Tools - 基迪奥生物信息绘图云平台​www.omicshare.com
9d6d8d1e6936ed68d838146436a9bdcc.png

b0fdcc5a67f840b63a7de980a594b1a4.png

率先观看更多工具使用教程,欢迎关注官方微信公众号:基迪奥生物 (gene-denovo)

参考资料
Fairfax B P , Taylor C A , Watson R A , et al. Peripheral CD8+ T cell characteristics associated with durable responses to immune checkpoint blockade in patients with metastatic melanoma[J]. Nature medicine, 2020, 26(11).
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值