返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >R语言绘制带ErrorBar的分组条形图代码的分享
  • 665
分享到

R语言绘制带ErrorBar的分组条形图代码的分享

2024-04-02 19:04:59 665人浏览 独家记忆
摘要

目录第一种实现方法:用aggregate计算数据第二种实现方法:用dplyr包计算数据笔者近期画了一张带error bar的分组条形图,将相关的代码分享一下。 感谢网友青山屋主的建议

笔者近期画了一张带error bar的分组条形图,将相关的代码分享一下。

感谢网友青山屋主的建议,提示笔者要严谨区分技术重复和生物学重复,所以笔者对文章做修改后重发。如果各位有任何建议,欢迎指正。

本文旨在给出一种利用R对生物学重复数据画带error bar的分组条形图的方法。

所用数据是模拟生成的:分成三个组,每个组进行了若干次生物学重复;测量的是3种基因的表达量。数据的部分内容如下:

##       gene1    gene2    gene3  Group
## 1  49.72475 267.0007 126.2007 Group1
## 2 114.62184 173.8780 150.2641 Group2
## 3 128.03351 227.9456 152.6378 Group3
## 4 134.90841 385.1979 148.2739 Group1
## 5 136.56659 190.0663 122.6201 Group2
## 6 143.88241 329.0516 236.9131 Group3

两种方法的完整代码放在了文末。如有问题,欢迎指正!

第一种实现方法:用aggregate计算数据

# 导入数据
setwd("E:/")
df <- read.csv("gene_exp.csv", header=T)
 
# 可以在这里改列名,这些列名就是最终图上X轴的标签名。
colnames(df)[1:3] <- c("gene-1", "gene-2", "gene-3")
str(df) # 显示数据集内容
## 'data.frame':    3000 obs. of  4 variables:
##  $ gene-1: num  49.7 114.6 128 134.9 136.6 ...
##  $ gene-2: num  267 174 228 385 190 ...
##  $ gene-3: num  126 150 153 148 123 ...
##  $ Group : Factor w/ 3 levels "Group1","Group2",..: 1 2 3 1 2 3 1 2 3 1 ...
# 将上述"宽数据"转化为"长数据"
library(reshape2)
df_reshape <- melt(df, id.vars=c("Group"))
str(df_reshape)
## 'data.frame':    9000 obs. of  3 variables:
##  $ Group   : Factor w/ 3 levels "Group1","Group2",..: 1 2 3 1 2 3 1 2 3 1 ...
##  $ variable: Factor w/ 3 levels "gene-1","gene-2",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ value   : num  49.7 114.6 128 134.9 136.6 ...
# 获取三个组各个基因表达量的平均值
df_mean <- aggregate(df_reshape$value, list(Group=df_reshape$Group,
                        gene=df_reshape$variable), mean, na.rm=T)
 
# 获取三个组各个基因表达量的标准差
df_sd <- aggregate(df_reshape$value, list(Group=df_reshape$Group,
                        gene=df_reshape$variable), sd, na.rm=T)
 
# 合并mean和sd
colnames(df_mean)[3] <- "mean"
colnames(df_sd)[3] <- "sd"
df_stat <- merge(df_mean, df_sd, by=c("Group", "gene"))
str(df_stat)
## 'data.frame':    9 obs. of  4 variables:
##  $ Group: Factor w/ 3 levels "Group1","Group2",..: 1 1 1 2 2 2 3 3 3
##  $ gene : Factor w/ 3 levels "gene-1","gene-2",..: 1 2 3 1 2 3 1 2 3
##  $ mean : num  120 249 149 119 250 ...
##  $ sd   : num  19.4 51.4 30.2 21.2 52.3 ...
# 画图
#直接在画图的语句中计算出error_bar所需的数据:
#(即下面的ymin=mean-sd和ymax=mean+sd语句)。
library(ggplot2)
dodge <- position_dodge(width=.9)
ggplot(data=df_stat) +
  geom_bar(aes(x=gene, y=mean, fill=Group), 
           stat="identity", position=dodge) +
  geom_errorbar(aes(x=gene, ymin=mean-sd, ymax=mean+sd, color=Group), 
                stat="identity", position=dodge, width=.3)

第二种实现方法:用dplyr包计算数据

# 导入数据
setwd("E:/")
df <- read.csv("gene_exp.csv", header=T)
 
# 可以在这里改列名,这些列名就是最终图上X轴的标签名。
colnames(df)[1:3] <- c("gene-1", "gene-2", "gene-3")
str(df) # 显示数据集内容
## 'data.frame':    3000 obs. of  4 variables:
##  $ gene-1: num  49.7 114.6 128 134.9 136.6 ...
##  $ gene-2: num  267 174 228 385 190 ...
##  $ gene-3: num  126 150 153 148 123 ...
##  $ Group : Factor w/ 3 levels "Group1","Group2",..: 1 2 3 1 2 3 1 2 3 1 ...
# 获取三个组各个基因表达量的平均值和标准差
library(tidyr)
library(dplyr)
df_stat <- tbl_df(df) %>%
  gather(gene, value, -Group) %>%  # 将"宽数据"转化为"长数据"
  group_by(Group, gene) %>%         # 将数据分组
  summarise(mean=mean(value, na.rm=T), sd=sd(value, na.rm=T)) %>% # 计算每组数据的mean和sd
  ungroup()
str(df_stat)
## Classes 'tbl_df', 'tbl' and 'data.frame':    9 obs. of  4 variables:
##  $ Group: Factor w/ 3 levels "Group1","Group2",..: 1 1 1 2 2 2 3 3 3
##  $ gene : chr  "gene-1" "gene-2" "gene-3" "gene-1" ...
##  $ mean : num  120 249 149 119 250 ...
##  $ sd   : num  19.4 51.4 30.2 21.2 52.3 ...
# 画图
#直接在画图的语句中计算出error_bar所需的数据:
#(即下面的ymin=mean-sd和ymax=mean+sd语句)。
library(ggplot2)
dodge <- position_dodge(width=.9)
df_stat %>% ggplot() +
  geom_bar(aes(x=gene, y=mean, fill=Group), 
           stat="identity", position=dodge) +
  geom_errorbar(aes(x=gene, ymin=mean-sd, ymax=mean+sd, color=Group), 
                stat="identity", position=dodge, width=.3)

两种方法的结果是一样的,相对而言,dplyr的实现方法更简单快捷。

最后,两种方法的完整代码如下:

#################第一种实现方法:用aggregate计算数据######################
# 导入数据
setwd("E:/")
df <- read.csv("gene_exp.csv", header=T)
 
# 可以在这里改列名,这些列名就是最终图上X轴的标签名。
colnames(df)[1:3] <- c("gene-1", "gene-2", "gene-3")
str(df) # 显示数据集内容
 
# 将上述"宽数据"转化为"长数据"
library(reshape2)
df_reshape <- melt(df, id.vars=c("Group"))
str(df_reshape)
 
# 获取三个组各个基因表达量的平均值
df_mean <- aggregate(df_reshape$value, list(Group=df_reshape$Group,
                        gene=df_reshape$variable), mean, na.rm=T)
 
# 获取三个组各个基因表达量的标准差
df_sd <- aggregate(df_reshape$value, list(Group=df_reshape$Group,
                        gene=df_reshape$variable), sd, na.rm=T)
 
# 合并mean和sd
colnames(df_mean)[3] <- "mean"
colnames(df_sd)[3] <- "sd"
df_stat <- merge(df_mean, df_sd, by=c("Group", "gene"))
str(df_stat)
 
# 画图
#直接在画图的语句中计算出error_bar所需的数据:
#(即下面的ymin=mean-sd和ymax=mean+sd语句)。
library(ggplot2)
dodge <- position_dodge(width=.9)
ggplot(data=df_stat) +
  geom_bar(aes(x=gene, y=mean, fill=Group), 
           stat="identity", position=dodge) +
  geom_errorbar(aes(x=gene, ymin=mean-sd, ymax=mean+sd, color=Group), 
                stat="identity", position=dodge, width=.3)
 
####################第二种实现方法:用dplyr包计算数据######################
# 导入数据
setwd("E:/")
df <- read.csv("gene_exp.csv", header=T)
 
# 可以在这里改列名,这些列名就是最终图上X轴的标签名。
colnames(df)[1:3] <- c("gene-1", "gene-2", "gene-3")
str(df) # 显示数据集内容
 
# 获取三个组各个基因表达量的平均值和标准差
library(tidyr)
library(dplyr)
df_stat <- tbl_df(df) %>%
  gather(gene, value, -Group) %>%  # 将"宽数据"转化为"长数据"
  group_by(Group, gene) %>%         # 将数据分组
  summarise(mean=mean(value, na.rm=T), sd=sd(value, na.rm=T)) %>% # 计算每组数据的mean和sd
  ungroup()
str(df_stat)
 
# 画图
#直接在画图的语句中计算出error_bar所需的数据:
#(即下面的ymin=mean-sd和ymax=mean+sd语句)。
library(ggplot2)
dodge <- position_dodge(width=.9)
df_stat %>% ggplot() +
  geom_bar(aes(x=gene, y=mean, fill=Group), 
           stat="identity", position=dodge) +
  geom_errorbar(aes(x=gene, ymin=mean-sd, ymax=mean+sd, color=Group), 
                stat="identity", position=dodge, width=.3)

以上就是 R语言绘制带ErrorBar的分组条形图代码的分享的详细内容,更多关于 R语言绘制带ErrorBar的分组条形图的资料请关注编程网其它相关文章!

--结束END--

本文标题: R语言绘制带ErrorBar的分组条形图代码的分享

本文链接: https://lsjlt.com/news/139509.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • R语言绘制带ErrorBar的分组条形图代码的分享
    目录第一种实现方法:用aggregate计算数据第二种实现方法:用dplyr包计算数据笔者近期画了一张带error bar的分组条形图,将相关的代码分享一下。 感谢网友青山屋主的建议...
    99+
    2024-04-02
  • R语言绘制条形图及分布密度图代码总结
    目录条形图普通条形图分组簇状条形图分布密度图条形图 普通条形图 ggplot(df,],aes(x=group,y=value)) +geom_bar(stat = "identit...
    99+
    2024-04-02
  • R语言绘制带误差线的条形图
    条形统计图是用一个单位长度表示一定的数量,根据数量的多少画成长短不同的直条.带误差的条形图可以通过误差线来判断显著性。 继续使用我们的汽车销售数据(公众号回复:汽车销售,可以获得该...
    99+
    2024-04-02
  • R语言绘制Vonoroi图的完整代码
    deldir包绘制Voronoi图 #install.packages("deldir") library(deldir) # data set.seed(1) x <-...
    99+
    2024-04-02
  • R语言 使用ggplot2绘制好看的分组散点图
    我们以iris数据集为例,该数据集包括花萼的长度和宽度,花瓣的长度和宽度,以及物种,如下图: 本文我们要绘制不同物种下花萼的长度和宽度的分布情况,以及二者之间的相关性关系。 1. ...
    99+
    2024-04-02
  • 怎么在R语言中使用ggplot2绘制分组散点图
    这篇文章将为大家详细讲解有关怎么在R语言中使用ggplot2绘制分组散点图,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 首先载入ggplot2包,library(ggplot2) 然后进行...
    99+
    2023-06-14
  • R语言绘图布局的案例分析
    本文将为大家详细介绍“R语言绘图布局的案例分析”,内容步骤清晰详细,细节处理妥当,而小编每天都会更新不同的知识点,希望这篇“R语言绘图布局的案例分析”能够给你意想不到的收获,请大家跟着小编的思路慢慢深入,具体内容如下,一起去收获新知识吧。在...
    99+
    2023-06-14
  • R语言利用barplot()制作条形图的各种实例
    前言 函数barplot()可以绘制条形图,其格式为 barplot(height) height是一个向量或者矩阵,使用horiz=TRUE可以生成一个水平的条形图, 例子 1...
    99+
    2024-04-02
  • Python实现动态条形图绘制的示例代码
    目录动态条形图变动态柱状图指定排序方式限制条目数设置固定条目固定数值轴,使其不发生动态变化设置图像帧数,默认 10 帧设置帧率,单位时间默认为 500ms设置每帧增加的标签时间,默认...
    99+
    2024-04-02
  • R语言实现PCA主成分分析图的示例代码
    目录简介开始作图1. PCA 分析图本质上是散点图2. 为不同类别着色3. 样式微调简介 主成分分析(Principal Component Analysis,PCA)是一种无监督的...
    99+
    2024-04-02
  • R语言数据可视化ggplot绘制置信区间与分组绘图技巧
    目录1. 单组情况1)构造数据集2)绘制置信区间2. 多组情况方法11)构造数据集2)绘制置信区间方法21)构造数据集2)绘制置信区间3)美化1. 单组情况 1)构造数据集 x ...
    99+
    2024-04-02
  • R语言怎么利用barplot()制作条形图的各种实例
    本篇内容介绍了“R语言怎么利用barplot()制作条形图的各种实例”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言函数barplot()...
    99+
    2023-06-09
  • python绘制铅球的运行轨迹代码分享
    我们按照面向过程程序设计的思想,使用python编写了程序,追踪铅球在运行过程中的位置信息。下面,修改程序代码,导入turtle模块,将铅球的运行轨迹绘制出来。 python3代码如下: from m...
    99+
    2022-06-04
    铅球 轨迹 代码
  • R语言数据可视化ggplot绘制置信区间以及分组绘图技巧是什么
    本篇文章为大家展示了R语言数据可视化ggplot绘制置信区间以及分组绘图技巧是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1. 单组情况1)构造数据集x <- 1:1...
    99+
    2023-06-25
  • CSS制作的三角形和圆形小按钮代码分享
    这篇文章主要介绍“CSS制作的三角形和圆形小按钮代码分享”,在日常操作中,相信很多人在CSS制作的三角形和圆形小按钮代码分享问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”CS...
    99+
    2024-04-02
  • 利用Python实现绘制3D爱心的代码分享
    目录环境介绍第一步,绘制一个三维的爱心亿点点细节加入时间序列加入心脏的跳动一个好的展示完整代码环境介绍 python3.8 numpy matplotlib 第一步,绘制一个三维的爱...
    99+
    2022-11-16
    Python绘制3D爱心 Python 3D爱心 Python 爱心
  • Go语言制作svg格式树形图的示例代码
    目录什么是SVGSVG定义SVG优点预定义元素圆形 <circle>直线 <line>文字 <text>结点SVG格式根结点子树结点叶结点结点坐标...
    99+
    2024-04-02
  • C语言实现消消乐游戏的代码分享
    C和C++游戏趣味编程》一书各个章节的案例代码,每章案例逐步利用学到的语法知识。 本章我们将编写十字消除游戏,用户点击空白方块,沿其上下左右方向寻找第一个彩色方块,如果有两个或两个以...
    99+
    2023-02-15
    C语言实现消消乐游戏 C语言消消乐游戏 C语言消消乐 C语言 游戏
  • python数据分析-matplotlib散点图-条形图的绘制以及完整方法归纳02
    matplotlib的基本使用02 一.散点图的绘制二.散点图绘图步骤及案例解析1.导入模块2.设置散点图所有字符的字体样式3.编写主体代码4.主题代码解析5.图形展示 三.条形图的绘制...
    99+
    2023-09-04
    python matplotlib 数据分析
  • C语言实现动态版通讯录的代码分享
    目录前言初始化函数具体实现代码检查容量函数实现代码销毁通讯录函数实现代码动态版通讯录完整代码前言 哈喽各位友友们,我今天又学到了很多有趣的知识,现在迫不及待的想和大家分享一下!我仅已...
    99+
    2023-01-12
    C语言动态版通讯录 C语言动态通讯录 C语言 通讯录
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作