前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >上手即用,分组统计检验直方图的绘图脚本分享

上手即用,分组统计检验直方图的绘图脚本分享

作者头像
用户1075469
发布于 2022-05-25 06:55:41
发布于 2022-05-25 06:55:41
58700
代码可运行
举报
文章被收录于专栏:科技记者科技记者
运行总次数:0
代码可运行

发文章,写论文,分组统计检验直方图是最常见和最实用的,你是否还在烦恼如果把图画好,帮你解决困难啦!这里分享下同事新鲜写就的绘图脚本,自带了示例数据,可以一键出图,助力你的科研和学习。

脚本和文件在这里:

链接: https://pan.baidu.com/s/1A5Opyo-rB4iXpxcdqahNQg?pwd=wmbd 提取码: wmbd 复制这段内容后打开百度网盘手机App,操作更方便哦

先来看下他提供的示例数据长啥样:

准备起来还是比较容易的,就6列。

再来看下他的脚本:

三个函数组成,代码写的还是比较规范的,管道用的66的,虽然赋值符合和我不是一个风格,这个萝卜青菜啦!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 读入表达矩阵
readFlie=function(input,type,row=T,header=T){
  # input 为读入文件的路径,type为读入文件的类型,格式为‘.txt’或‘.csv’,row=T,将文件的第一列设置为列名
  library(data.table,quietly = TRUE)
  if(type=='txt'){
    dat = fread(input,header = header,sep='\t',stringsAsFactors = F,check.names = F)
    if(row){
      dat = as.data.frame(dat,stringsAsFactors = F)
      rownames(dat) = dat[,1]
      dat = dat[,-1]
    }else{
      dat = as.data.frame(dat,stringsAsFactors = F)
    }
  }else{
    dat = fread(input,header = header,sep=',',stringsAsFactors = F,check.names = F)
    if(row){
      dat = as.data.frame(dat,stringsAsFactors = F)
      rownames(dat) = dat[,1]
      dat = dat[,-1]
    }else{
      dat = as.data.frame(dat,stringsAsFactors = F)
    }
  }
  return(dat)
}

# 保存图片,只支持ggplot对象
savePlots=function(path,plot,type=c('pdf','png','tiff','svg')[1],width=10,height=8,dpi=300){
  # path表示保存图片路径,需要加上相应的文件扩展名称,plot表示ggplot对象,type表示要保存的图片格式
  if(type=='pdf'){
    ggplot2::ggsave(filename = path,plot = plot,width = width,height = height,device = 'pdf')
  }else if(type=='svg'){
    svglite::ggsave(filename = path,plot = plot,width = width,height = height,device = 'svg')
  }else if(type=='png'){
    ggplot2::ggsave(filename = path,plot = plot,width = width,height = height,device = 'png',dpi = dpi)
  }else{
    ggplot2::ggsave(filename = path,plot = plot,width = width,height = height,device = 'tiff',dpi = dpi)
  }
}
# 分组条形图
PlotGroup_barplot=function(data,xlab = '', ylab = 'Value',legend = 'Group',
                             color =NULL,show_compare= T,cmp_show_compare = T,
                             test_method = c('wilcox.test','t.test','kruskal.test','anova')[1],
                             cmp_test_method = c('wilcox.test','t.test')[1],
                             orientation = c('vertical','horizontal','reverse')[1],
                             p_show = c('p.signif','p.format')[1],
                             add = c( 'mean_se', 'mean_sd', 'mean_ci', 'mean_range', 'median','mean', 'median_iqr')[1]){
# data是一个数据框,包含三列,第一列是样本名称(X轴坐标),第二列是样本分组信息,第三列为值(Y轴坐标)
  # xlab,ylab和labs 分别自定义X轴名称,Y轴名称和图例标题名称
  # colors 自定义颜色,默认为NULL,函数会根据RColorBrewer包进行配色
  # show_compare 是否展示同组样本之间所有组别之间差异比较
  # test_method 同组样本之间所有组别之间差异比较方法
  # cmp_show_compare T or F 是否展示同组样本之间两两进行比较,样本分组必须大于2
  # cmp_test_method 同组样本之间两两进行比较方法
  # p_show 图片上差异显著性展示方式,*: p <= 0.05 **: p <= 0.01 ***: p <= 0.001 ****: p <= 0.0001
  # add 在条形图上添加统计值如样本的标准差,标准误,详细参数见https://www.rdocumentation.org/packages/ggpubr/versions/0.4.0/topics/add_summary 
  library(ggplot2)
  library(ggpubr)
  library(rstatix)
  library(dplyr)
  if(is.null(colors)){
    library(RColorBrewer)
    color = c(brewer.pal(9,'Set1'),brewer.pal(8,'Set2'),brewer.pal(12,'Set3'),
              brewer.pal(9,'Pastel1'),brewer.pal(8,'Pastel2'),brewer.pal(8,'Accent'),
              brewer.pal(8,'Dark2'),brewer.pal(12,'Paired')) %>% unique()
  }
  names(data) = c('Sample','Group',"Value")
  # 绘图
  p = ggbarplot(data, x = "Sample", y = "Value",fill = "Group", xlab = xlab,ylab = ylab,add = add,width = 0.5,legend.title = legend,palette = color,position = position_dodge(0.6),ggtheme = theme_bw()) + scale_y_continuous(expand = expansion(mult = c(0, 0.1)))
  if(show_compare){
    p = p + stat_compare_means(aes(group = Group), label = p_show,method = test_method )
  }
  # 组内样本两两之间差异比较
  if(cmp_show_compare & length(unique(data$Group))>2){
    if(cmp_test_method=='wilcox.test'){
      stat.test = data %>%
        group_by(Sample) %>%
        wilcox_test(Value ~ Group,p.adjust.method = "none") 
      stat.test = stat.test %>%
        add_xy_position(x = "Sample", fun = "mean_sd", dodge = 0.8) %>% dplyr::filter(p<0.05)
    }else{
      stat.test = data %>%
        group_by(Sample) %>%
        t_test(Value ~ Group,p.adjust.method = "none") 
      stat.test = stat.test %>%
        add_xy_position(x = "Sample", fun = "mean_sd", dodge = 0.8) %>% dplyr::filter(p<0.05)
    }
    if(p_show == 'p.signif'){
      p = p + stat_pvalue_manual(stat.test, label = "p.adj.signif", tip.length = 0.005,bracket.nudge.y = -2)
    }else{
      p = p + stat_pvalue_manual(stat.test, label = "p.adj", tip.length = 0.005,bracket.nudge.y = -2)
    }
  }
  return(p)
}
df = readFlie(input = 'C:\\Users\\zd200\\Desktop\\不常用\\直方图实例文件.txt',type = 'txt',row = F)
library(tidyr)
library(dplyr)
dt = df %>% pivot_longer(cols = -Group,names_to  = 'gene')
data1 = dt[,c(2,1,3)]
data2 = dt[,c(2,1,3)] %>% filter(Group!='Med')
p1 = PlotGroup_barplot(data = data1,test_method = 'kruskal.test',add = 'mean_sd')
p1
p2 = PlotGroup_barplot(data = data2,test_method = 'wilcox.test',add = 'mean_sd')
p2
savePlots(path = './PlotGroup_barplot1.pdf',plot = p1,type = 'pdf',width = 6,height = 4)
savePlots(path = './PlotGroup_barplot2.pdf',plot = p2,type = 'pdf',width = 6,height = 4)

最后,看下图的效果

配色还不错,颜值在线,你可以根据自己的需求微调。

怎样,快试试吧!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微因 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
🤔 艾录叔 | 多组比较及绘图
1写在前面 写毕业课题统计时编写的一段代码,大量数据很快就可以统计出结果并作用,方便的很。统计使用的是r基础stat包,绘图使用的ggplot2包。都是很常见的,网上教程也很多。 2示例数据 示例为利用excel随机生成的一列数字 y <- read.table("clipboard", header = F) 该法是直接访问的剪贴板,可以用read.xlsx,read.table,read.csv等函数读取已经整理好的数据。分组信息也可读入。 3输入分组信息 a1 <- factor(c(rep(c
生信漫卷
2022/10/31
3750
🤔 艾录叔 | 多组比较及绘图
RNA-seq入门实战(四):差异分析前的准备——数据检查
连续两次求贤令:曾经我给你带来了十万用户,但现在祝你倒闭,以及 生信技能树知识整理实习生招募,让我走大运结识了几位优秀小伙伴!大家开始根据我的ngs组学视频进行一系列公共数据集分析实战,其中几个小伙伴让我非常惊喜,不需要怎么沟通和指导,就默默的完成了一个实战!
生信技能树
2022/07/26
2.6K1
RNA-seq入门实战(四):差异分析前的准备——数据检查
课前准备---空间转录组数据分析之分子niche
追风少年i
2024/07/17
1880
课前准备---空间转录组数据分析之分子niche
复现GMM文章(一):图1代码和数据
所有的数据百度网盘链接: https://pan.baidu.com/s/1isKEK1G5I6X90KYqLufmWw
生信学习者
2024/07/17
760
复现GMM文章(一):图1代码和数据
24种R语言新手入门之小提琴图(三)
柱状图和箱线图的代码能理解了其实发现好多作图都是可以触类旁通的,小提琴图作为科研结果常用展示图也不可或缺,用ggplot或者vioplot。
生信初学者
2023/03/14
1.9K0
24种R语言新手入门之小提琴图(三)
免疫浸润结果可视化
在之前的推文中我们介绍了2行代码实现9种免疫浸润方法,今天给大家介绍下常见的免疫浸润结果的可视化。
医学和生信笔记
2023/08/30
1.3K0
免疫浸润结果可视化
单细胞数据复现-肺癌文章代码复现9
单细胞数据复现-肺癌文章代码复现1https://cloud.tencent.com/developer/article/1992648
小胡子刺猬的生信学习123
2022/07/11
9350
单细胞数据复现-肺癌文章代码复现9
我的 Shiny 练习 | 堆积柱状图
我最近在分析胆汁酸的数据,所以想画个堆积柱状图,看看组间情况,大概的设想就是这样:
生信菜鸟团
2021/02/03
2.6K0
我的 Shiny 练习 | 堆积柱状图
24种R语言新手入门之箱线图(二)
箱线图一般用于可视化基因的表达情况,常化用统计学方法计算组间基因的表达差异情况。以下主要是用boxplot和geom_boxplot
生信初学者
2023/03/14
2.1K0
24种R语言新手入门之箱线图(二)
单细胞经典文章复现(二)
今天复现的文章是2022年发表在《Nature》子刊《Communications Biology》上,题为“Single-cell transcriptomics reveals cellular heterogeneity and molecular stratification of cervical cancer”的宫颈癌单细胞研究。
天意生信云
2025/03/06
1170
单细胞经典文章复现(二)
文献复现-单细胞揭示新辅助治疗后NSCLC的免疫微环境变化
文章在这:Tumor microenvironment remodeling after neoadjuvant immunotherapy in non-small cell lung cancer revealed by single-cell RNA sequencing 方法:来自3名治疗前和12名接受新辅助PD-1阻断联合化疗的非小细胞肺癌(NSCLC)患者的~92,000个单细胞的转录组。根据病理反应将12个治疗后样本分为两组:MPR(n = 4)和非MPR(n = 8)。
生信菜鸟团
2023/09/09
1.7K0
文献复现-单细胞揭示新辅助治疗后NSCLC的免疫微环境变化
科研绘图系列:R语言绘制SCI论文代码合集
The following code can be used to generate figures for the saliva adhesion assay and opsonic phagocytosis assay (OPK)
生信学习者
2025/02/19
700
科研绘图系列:R语言绘制SCI论文代码合集
「R」数据可视化2 : 箱形图
在生物领域我们常常使用R语言对数据可视化。在对数据可视化的时候,我们需要明确想要展示的信息,从而选择最为合适的图突出该信息。本系列文章将介绍多种基于不同R包的作图方法,希望能够帮助到各位读者。
王诗翔呀
2020/07/06
2.2K0
「R」数据可视化2 : 箱形图
SCLC某两个基因共表达情况
哦转换完ID之后发现这个数据集没有我想要的两个基因; 换一个,随便搜了几篇文章里所使用到的数据集: ①GSE6044和GSE40275 ②GSE43346和GSE6044 ③GSE6044和GSE11969 ④GSE40275,GSE1037,GSE44447 综合多个数据集的数据可以看到,DLL3在小细胞肺癌中高表达。
生信菜鸟团
2024/04/11
1700
SCLC某两个基因共表达情况
R tips:ggplot2进行多维原位图绘制
R中可以使用ggplot2的geom_tile图层绘制热图,可是有的时候我们想要每一个热图格子里面可以展示多维的信息:多个基因表达量、多个组别数据等等,而不是一个热图仅展示了一个表达量信息。本文可以解决这个需求。
生信菜鸟团
2025/01/07
940
R tips:ggplot2进行多维原位图绘制
文献组图
追风少年i
2025/01/07
720
文献组图
批量统计比较,听说你想要很久了?安排!
统计学一直是让医学生头疼的课程,文章中各式各样的统计方法让人云里雾里。举个简单的例子,两组之间的比较,该怎么分析?你肯跟会说用t检验,不过t检验一定是正确的吗?是否方差齐性,是否正态分布,这些都是我们要关心的,如果方差不齐,我们该怎么办?如果有很多分组,我们两两之间必要,也要花费很多的时间。那有没有什么快速、高效、准确的方法,能够让我们快速准确绘制统计检验的图形呢?哈哈,今天我们就来学习一下如何用最快最简单的方式完成统计检验和绘制发表级的图片吧!
用户6317549
2020/07/16
1.5K0
【单细胞中性粒】慢性病毒性肝炎(复现fig1)
这里我画的确实不咋美观呢【此外,似乎原文的marker不是按照top基因来选的?】
生信菜鸟团
2024/06/11
1190
【单细胞中性粒】慢性病毒性肝炎(复现fig1)
(文末送书)绘图技巧 | 一行代码实现多图组合和风格主题设置
如果现在你还是将自己制作的图表放在PS或者PPT中进行随意组合的话,那么这篇文章你就得好好看看了,今天小编就给大家安利一个超强的突变自由组合包-patchwork,让你轻松实现多图的自由组合。下面小编结合实例介绍一下该包的主要用法:
DataCharm
2021/04/16
6050
(文末送书)绘图技巧 | 一行代码实现多图组合和风格主题设置
跟着Nature Communication学作图:R语言ggpubr包画箱线图并添加显著性P值
https://www.nature.com/articles/s41467-022-29144-4#code-availability
用户7010445
2023/01/06
7360
跟着Nature Communication学作图:R语言ggpubr包画箱线图并添加显著性P值
推荐阅读
相关推荐
🤔 艾录叔 | 多组比较及绘图
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验