百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 博客教程 > 正文

分享18种特色科研图表的绘制方法 科研图怎么画

connygpt 2024-10-16 08:45 10 浏览

1.彩色标签条形图

条形图,展示分析结果直观明了,绘制方法非常简单,在科研数据的展示中占有非常重要的地位,差不多每篇学术论文都可以看到它。可是,条形图看似简单,但有些条形图的绘制还是有一点难度的,比如下图这样的。

我们可发现上图最大特点(也是绘制难点)是“两级”刻度标签的添加,并且使坐标轴(Y轴)刻度标签的颜色是与“条形”的颜色是完全一致的,这里其实涉及到数字“0”和空值的妙用。关于这类图表的绘制,比如气泡图,箱型图,小提琴图等,其实利用ggplot2包的一个小小的“Bug”就可以完美实现。

#读入数据;
dt1<-read.table("koenrich.xls",sep = "\t",header = T)
#指定纵轴标签顺序,按照输入文件的顺序排序,否则默认按照首字母顺序,同时逆序绘制,保持与表格顺序一致;
dt1$KEGG_A_Class<-factor(dt1$KEGG_A_Class,
                         levels = rev(unique(dt1$KEGG_A_Class)),
                         ordered = TRUE)
dt1$KEGG_B_Class<-factor(dt1$KEGG_B_Class,
                         levels = rev(unique(dt1$KEGG_B_Class)),
                         ordered = TRUE)
# 加载ggplot2包;
library(ggplot2)
#建立数据(Genes.Number, KEGG_B_Class)与图形(点)的映射关系;
p1<-ggplot(dt1, aes(x=Genes_Number,
                    y=KEGG_B_Class,
                    fill=KEGG_A_Class,na.rm = FALSE))+
  geom_bar(stat="identity",na.rm = FALSE)+
 geom_text(aes(x=Genes_Number,y=KEGG_B_Class,label=label),size=2.5,hjust="left",nudge_x=0.1)+
  scale_x_continuous(limits = c(0, 25),expand=expansion(mult = c(0, .1)))+
  labs(x="Number of Gene",y="",title="KEGG pathway anotation")
p1

#获取颜色;
g <- ggplot_build(p1)
mycol<-g$data[[1]]["fill"]
col<-rev(mycol[,1])
#将A Class对应的颜色设为深黑色;
num <- rev(dt1$Genes_Number)
index <- which(num==0)
col[index] <- "grey10"
#自定义图表主题,对图表做精细调整;
top.mar=0.2
right.mar=0.2
bottom.mar=0.2
left.mar=0.2
mytheme1<-theme(plot.title = element_text(size = rel(1),hjust = 0.5,face = "bold"),
                          axis.title = element_text(size = rel(1)),
                          axis.text.y = element_text(size=rel(0.85),
                                                     colour =col,face = "bold"),
                          legend.position = "none",
                          plot.margin=unit(x=c(top.mar,right.mar,
                                               bottom.mar,left.mar),
                                           units="inches"))
#查看绘图效果;
p1+mytheme1

2.发散PCA散点图

PCA (Principal Component Analysis) 散点图,是科研文章中常见的一类散点图。下面就以PCA散点图为例,为大家介绍如何使用ggplot2绘制好看的散点图。

#读入数据;
dt <- read.csv("PCA_data.csv")
#载入ggplot2绘图包;
library(ggplot2)
library(ggh4x)

#绘制实心散点图;
p1 <- ggplot(dt,aes(x=PC1,y=PC2,fill=Diagnosis))+
  stat_centroid(aes(xend = PC1, yend = PC2, colour = Diagnosis),
                geom = "segment", crop_other = F,
                alpha=0.3,size = 1,show.legend = F)+
  geom_point(size=3,alpha=0.7,
             color="white",shape = 21,show.legend = T)+
  scale_color_manual(name="",
                     values = c("#FF9999","#c77cff"))+
  scale_fill_manual(name="",
                     values = c("#FF9999","#c77cff"))+
  scale_x_continuous(expand=expansion(add = c(0.7,0.7)),
                     limits=c(-10,5))+
  scale_y_continuous(expand=expansion(add = c(0.5,0.5)),
                     limits=c(-7.5,5))+
  guides(x = "axis_truncated",y = "axis_truncated")

p1

3.漂亮的玫瑰图

条形图(或柱状图)是科研文章中比较常见的数据展示方式。除了墨守常规的样式,其实你也可以试试南丁格尔玫瑰图,特别是当你的数据具有周期性的时候,比如四季变化、昼夜节律等,非常适合。

#读入数据;
dt <- read.csv("test_data.csv")
#实用month.abb[]将月份转换为英文缩写;
dt$Month <- month.abb[dt$Month]
#载入相关的R包;
library(dplyr)
library(ggplot2)
#转成tibble格式;
df <- as_tibble(dt)
#将月份转换成因子,固定顺序;
df$Month <- factor(df$Month,levels = unique(df$Month),ordered = T)
#将季度数值转成字符;
df$Quarter <- as.character(df$Quarter)

#提取作图数据;
df1 <- filter(df,Group=="Day")
#自定义颜色;
subcol<-rainbow(12)
mycol1<-colorRampPalette(subcol[1:4])(12)
mycol2<-colorRampPalette(c("#A5CC26","yellow","orange","tomato"))(12)

#绘制相互叠合的玫瑰图;
p1 <- ggplot(df1,aes(x = Month, y=Length,fill=Month))+
  geom_col(width = 1.2,color=NA,alpha=1)+
  geom_text(aes(label = Length),nudge_y=-2,
            colour="white",size=3)+
  ylim(-1.2,17)+
  scale_fill_manual(values = mycol1)+
  coord_polar(start = 0)+
  theme_void()
p1

4.富集分析圈图

OmicShare的GO、KEGG富集分析工具非常强大,只需上传目的基因文件,即可进行常见物种的GO、KEGG富集分析。分析结果中,直接包含数据可视化结果,比如柱状图、圈图、网络图等。

工具链接:

https://www.omicshare.com/tools/Home/Soft/gogseasenior

https://www.omicshare.com/tools/Home/Soft/pathwaygseasenior

5.相关性网络热图

网络热图,应用于多组学关联分析,可展示组学内(热图)和组学间(网络图)的相关性结果。其中,组学内相关性热图,用于展示每两个元素(环境因子、代谢物、性状等)之间相关系数;组学间相关性网络图,可展示16S-OTU、宏基因组-物种、基因等丰度信息与相关性数据文件每个元素之间的相关性。

工具链接:

https://www.omicshare.com/tools

6.漂亮的桑基图

桑基图(SanKey Plot)非常适合展示数据的流动变化,输入关联分析数据或其他数据绘制桑基图,查看数据的流向,或展示数据间的关联。

工具链接:

https://www.omicshare.com/tools/home/report/report_sankey.html

7.多组差异散点图

多组差异散点图,以组间差异倍数的对数值log2FC为纵坐标,以比较组的名称为横坐标,可一次性展示多个比较组的差异基因。一般而言,对于传统的火山图,一张图一次只能展示一个比较组的差异基因,而多组差异散点图可视作多组“火山图”,可一次性展示多个比较组的差异基因。

工具链接:

https://www.omicshare.com/tools/home/report/report_diff_scatter_chart.html

8.自定义标签热图

热图,主要使用渐变颜色来展现数据在不同样本中的变化规律,工具除了支持为热图添加分组注释条,也可以指定展示特定的文字标签,即使绘制上百个基因的热图,基因标签也不会重叠在一起。

工具链接:

https://www.omicshare.com/tools/Home/Soft/heatmap

9.动态交互韦恩图

韦恩图(Venn diagram)用于展示不同数据集之间的交集情况,在韦恩图中一般以椭圆、正圆等图形代表不同的数据集,以图形之间的重叠区域代表数据集之间的交集情况。下面为大家推荐一个强大的韦恩图在线工具,可以轻松完成多分组韦恩图的绘制。

工具链接:

https://www.omicshare.com/tools/home/report/reportvenn.html

该工具支持通过“筛选后”的元素数据文件或“筛选前”的丰度数据文件绘制韦恩图,并支持查看和提取子集部分的元素信息。

10.环状网络图

环状网络绘制方法其实比较简单,除了使用Cytoscape软件,使用ggraph包可实现网络图的绘制。

#载入所需的绘图包;
library(ggraph)
library(tidygraph)
library(igraph)
library(ggplot2)
#读入边文件和节点信息文件;
net <- read.csv("edge_data.csv")
info <- read.csv("node_info.csv")
#预览数据;
head(net)
head(info)

#创建网络图对象;
g <- tbl_graph(nodes = info,edges = net,directed = F)
#计算网络图的degree属性;
V(g)$degree <- degree(g)
#自定义颜色;
mycol <- c("#FF8901","#00C5FF","#FF5485")

#绘制环状网络图(曲线连线);
p1 <- ggraph(g, layout = 'linear',circular = TRUE)+
  geom_edge_arc(colour="grey50",width=1,alpha=0.3)+
  geom_node_point(aes(color=class),size=6,alpha=0.8)+
  scale_colour_manual(values = mycol)+
  geom_node_text(aes(x = 1.05 * x,y = 1.05 * y,
                     angle = -((-node_angle(x, y) + 90) %% 180) + 90,
                     label=name),
                 nudge_y = 0,
                 hjust = 'outward',
                 repel = F,
                 size=2.5)+
  coord_fixed(clip = "off")+
  theme_graph()
p1

11.星号标记热图

一般在绘制常规的相关性热图后,根据pvalue数值继续在热图上添加显著性标记(星号),如下图。

12.正负号标记热图

除了在热图上添加显著性标记,我们也可以使用“正负号”标记正相关和负相关,如下图,或者仅显示某一范围的相关性系数值。

13.环形热图

环状热图可与环形聚类树结合使用,看起来很整洁美观,特别适合展示不同分组基因的表达数据。

14.网络韦恩图

网络韦恩图,用以展示不同分组之间共有或特有的基因,特别是当分组元素数量较少时,数据展示效果更加直观。

15.好看的火山图

火山图(Volcano plot)是一种比较“远古”的一种散点图,广泛应用于转录组、蛋白组等组间差异分析结果的展示。图表的横轴一般展示差异倍数的变化,而纵轴表示差异分析结果的可靠性。

我这里对传统的火山图做了进一步的优化,比如通过调整点的大小突出展示感兴趣基因对应的点,并将感兴趣基因的名称以标签的方式展示出来。那么,如何绘制这般个性又好看的火山图呢?我这里主要用到的还是最常见的ggplot2包。

16. t-SNE散点图

在单细胞转录组数据分析中,t-SNE散点图是展示细胞亚群图谱的重要手段,而Seurat的标准绘图效果并不能做更多调整,不过我们可以提取数据使用ggplot2重新绘制!

17.双坐标轴图表

转录组测序后,往往需要用qPCR结果去验证,我们常常需要绘制双坐标轴图表进行比较,如下图,左侧的坐标轴对应Q-PCR的结果(柱状图),右侧的坐标轴对应RNA-seq的测序结果(折线图)。

18.上下对称组合图

上下对称图表适合展示两组量纲不同却具有一定相关性的数据,如下图。图表的下部分表示一段时间内的降雨量(mm)变化,而上部分则表示相应时段对应的蒸发量(m3/s)。

相关推荐

自学Python,写一个挨打的游戏代码来初识While循环

自学Python的第11天。旋转~跳跃~,我~闭着眼!学完循环,沐浴着while的光芒,闲来无事和同事一起扯皮,我说:“编程语言好神奇,一个小小的循环,竟然在生活中也可以找到原理和例子”,同事也...

常用的 Python 工具与资源,你知道几个?

最近几年你会发现,越来越多的人开始学习Python,工欲善其事必先利其器,今天纬软小编就跟大家分享一些常用的Python工具与资源,记得收藏哦!不然下次就找不到我了。1、PycharmPychar...

一张思维导图概括Python的基本语法, 一周的学习成果都在里面了

一周总结不知不觉已经自学Python一周的时间了,这一周,从认识Python到安装Python,再到基本语法和基本数据类型,对于小白的我来说无比艰辛的,充满坎坷。最主要的是每天学习时间有限。只...

三日速成python?打工人,小心钱包,别当韭菜

随着人工智能的热度越来越高,许多非计算机专业的同学们也都纷纷投入到学习编程的道路上来。而Python,作为一种相对比较容易上手的语言,也越来越受欢迎。网络上各类网课层出不穷,各式广告令人眼花缭乱。某些...

Python自动化软件测试怎么学?路线和方法都在这里了

Python自动化测试是指使用Python编程语言和相关工具,对软件系统进行自动化测试的过程。学习Python自动化测试需要掌握以下技术:Python编程语言:学习Python自动化测试需要先掌握Py...

Python从放弃到入门:公众号历史文章爬取为例谈快速学习技能

这篇文章不谈江流所专研的营销与运营,而聊一聊技能学习之路,聊一聊Python这门最简单的编程语言该如何学习,我完成的第一个Python项目,将任意公众号的所有历史文章导出成PDF电子书。或许我这个Py...

【黑客必会】python学习计划

阅读Python文档从Python官方网站上下载并阅读Python最新版本的文档(中文版),这是学习Python的最好方式。对于每个新概念和想法,请尝试运行一些代码片段,并检查生成的输出。这将帮助您更...

公布了!2025CDA考试安排

CDA数据分析师报考流程数据分析师是指在不同行业中专门从事行业数据搜集、整理、分析依据数据作出行业研究评估的专业人员CDA证书分为1-3级,中英文双证就业面广,含金量高!!?报考条件:满18...

一文搞懂全排列、组合、子集问题(经典回溯递归)

原创公众号:【bigsai】头条号:程序员bigsai前言Hello,大家好,我是bigsai,longtimenosee!在刷题和面试过程中,我们经常遇到一些排列组合类的问题,而全排列、组合...

「西法带你学算法」一次搞定前缀和

我花了几天时间,从力扣中精选了五道相同思想的题目,来帮助大家解套,如果觉得文章对你有用,记得点赞分享,让我看到你的认可,有动力继续做下去。467.环绕字符串中唯一的子字符串[1](中等)795.区...

平均数的5种方法,你用过几种方法?

平均数,看似很简单的东西,其实里面包含着很多学问。今天,分享5种经常会用到的平均数方法。1.算术平均法用到最多的莫过于算术平均法,考试平均分、平均工资等等,都是用到这个。=AVERAGE(B2:B11...

【干货收藏】如何最简单、通俗地理解决策树分类算法?

决策树(Decisiontree)是基于已知各种情况(特征取值)的基础上,通过构建树型决策结构来进行分析的一种方式,是常用的有监督的分类算法。决策树算法是机器学习中的一种经典算法,它通过一系列的规则...

面试必备:回溯算法详解

我们刷leetcode的时候,经常会遇到回溯算法类型题目。回溯算法是五大基本算法之一,一般大厂也喜欢问。今天跟大家一起来学习回溯算法的套路,文章如果有不正确的地方,欢迎大家指出哈,感谢感谢~什么是回溯...

「机器学习」决策树——ID3、C4.5、CART(非常详细)

决策树是一个非常常见并且优秀的机器学习算法,它易于理解、可解释性强,其可作为分类算法,也可用于回归模型。本文将分三篇介绍决策树,第一篇介绍基本树(包括ID3、C4.5、CART),第二篇介绍Ran...

大话AI算法: 决策树

所谓的决策树算法,通俗的说就是建立一个树形的结构,通过这个结构去一层一层的筛选判断问题是否好坏的算法。比如判断一个西瓜是否好瓜,有20条西瓜的样本提供给你,让你根据这20条(通过机器学习)建立起...