R语言学习 - 柱状图

柱状图绘制

柱状图也是较为常见的一种数据展示方式,可以展示基因的表达量,也可以展示GO富集分析结果,基因注释数据等。这篇转录组工具比较 转录组分析工具哪家强?中就使用到比较多堆积柱状图。

常规矩阵柱状图绘制

有如下4个基因在5组样品中的表达值

data_ori <- "Grp_1;Grp_2;Grp_3;Grp_4;Grp_5
a;2.6;2.9;2.1;2.0;2.2
b;20.8;9.8;7.0;3.7;19.2
c;10.0;11.0;9.2;12.4;9.6
d;9;3.3;10.3;11.1;10"data <- read.table(text=data_ori, header=T, row.names=1, sep=";", quote="")
data
 Grp_1 Grp_2 Grp_3 Grp_4 Grp_5
a   2.6   2.9   2.1   2.0   2.2
b  20.8   9.8   7.0   3.7  19.2
c  10.0  11.0   9.2  12.4   9.6
d   9.0   3.3  10.3  11.1  10.0

整理数据格式,保留基因名字信息

library(ggplot2)
library(reshape2)
library(dplyr)
data_rownames <- rownames(data)
data_colnames <- colnames(data)
data$gene <- data_rownames
data_m <- melt(data, id.vars=c("gene"))
data_m
   gene variable value
1          a    Grp_1   2.6
2          b    Grp_1  20.8
3          c    Grp_1  10.0
4          d    Grp_1   9.0
5          a    Grp_2   2.9
6          b    Grp_2   9.8
7          c    Grp_2  11.0
8          d    Grp_2   3.3

首先看下每个基因在不同组的表达情况

# 给定数据,和x轴、y轴所在列名字
# 直接使用geom_bar就可以绘制柱状图
# position: dodge: 柱子并排放置
p <- ggplot(data_m, aes(x=gene, y=value))
p + geom_bar(stat="identity", position="dodge", aes(fill=variable))# 如果没有图形界面,运行下面的语句把图存在工作目录下的Rplots.pdf文件中
#dev.off()

图片

柱子有点多,也可以利用mean±SD的形式展现

首先计算平均值和标准差,使用group_by按gene分组,对每组做summarize

获取平均值和标准差

data_m_sd_mean <- data_m %>% group_by(gene) %>% dplyr::summarise(sd=sd(value), value=mean(value))
data_m_sd_mean <- as.data.frame(data_m_sd_mean)
data_m_sd_mean
 gene        sd value
1         a 0.3781534  2.36
2         b 7.5491721 12.10
3         c 1.2837445 10.44
4         d 3.1325708  8.74

使用geom_errorbar添加误差线

p <- ggplot(data_m_sd_mean, aes(x=gene, y=value)) + geom_bar(stat="identity") +geom_errorbar(aes(ymin=value-sd, ymax=value+sd))
p

图片

设置误差线的宽度和位置

p <- ggplot(data_m_sd_mean, aes(x=gene, y=value)) + geom_bar(stat="identity", aes(fill=gene)) +geom_errorbar(aes(ymin=value-sd, ymax=value+sd), width=0.2, position=position_dodge(width=0.75))
p

图片

每个基因的原始表达值堆积柱状图 (只需要修改positon=stack)

# position="fill" 展示的是堆积柱状图各部分的相对比例
# position="stack" 展示的是堆积柱状图的原始值
p <- ggplot(data_m, aes(x=variable, y=value)) +geom_bar(stat="identity", position="stack", aes(fill=gene)) +geom_text(aes(label=value), position=position_stack(vjust=0.5))
p

堆积柱状图显示没问题,但文本标记错位了

图片

指定下分组信息,位置计算就正确了

# position="fill" 展示的是堆积柱状图各部分的相对比例
# position="stack" 展示的是堆积柱状图的原始值
p <- ggplot(data_m, aes(x=variable, y=value, group=gene)) +geom_bar(stat="identity", position="stack", aes(fill=gene)) +geom_text(aes(label=value), position=position_stack(vjust=0.5))
p

图片

比较每组各个基因的相对表达 (position=fill)

# position="fill" 展示的是堆积柱状图各部分的相对比例
# position="stack" 展示的是堆积柱状图的原始值,可以自己体现下看卡差别
p <- ggplot(data_m, aes(x=variable, y=value)) +geom_bar(stat="identity", position="fill", aes(fill=gene))
p

图片

纵轴的显示改为百分比

p <- ggplot(data_m, aes(x=variable, y=value)) +geom_bar(stat="identity", position="fill", aes(fill=gene)) +scale_y_continuous(labels = scales::percent)
p

图片

在柱子中标记百分比值

首先计算百分比,同样是group_by (按照给定的变量分组,然后按组操作)和mutate两个函数(在当前数据表增加新变量)

# group_by: 按照给定的变量分组,然后按组操作
# mutate: 在当前数据表增加新变量
# 第一步增加每个组的加和,第二步计算比例
data_m <- data_m %>% group_by(variable) %>% mutate(count=sum(value)) %>% mutate(freq=round(100*value/count,2))

再标记相对比例信息

p <- ggplot(data_m, aes(x=variable, y=value, group=gene)) +geom_bar(stat="identity", position="fill", aes(fill=gene)) +scale_y_continuous(labels = scales::percent) +geom_text(aes(label=freq), position=position_fill(vjust=0.5))
p

图片

长矩阵分面绘制

再复杂一些的矩阵 (除了有不同时间点的信息,再增加对照和处理的信息)

library(ggplot2)
library(reshape2)
library(dplyr)data_ori <- "Gene;Group;Expr;Condition
a;T1;2.6;Control
b;T1;20.8;Control
c;T1;10;Control
d;T1;9;Control
a;T2;2.9;Control
b;T2;9.8;Control
c;T2;11;Control
d;T2;3.3;Control
a;T3;2.1;Control
b;T3;7;Control
c;T3;9.2;Control
d;T3;10.3;Control
a;T4;2;Control
b;T4;3.7;Control
c;T4;12.4;Control
d;T4;11.1;Control
a;T5;2.2;Control
b;T5;19.2;Control
c;T5;9.6;Control
d;T5;10;Control
d;T1;2.6;Treatment
b;T1;20.8;Treatment
c;T1;10;Treatment
a;T1;9;Treatment
d;T2;2.9;Treatment
b;T2;9.8;Treatment
c;T2;11;Treatment
a;T2;3.3;Treatment
a;T3;2.1;Treatment
c;T3;7;Treatment
b;T3;9.2;Treatment
d;T3;10.3;Treatment
a;T4;2;Treatment
c;T4;3.7;Treatment
b;T4;12.4;Treatment
d;T4;11.1;Treatment
a;T5;2.2;Treatment
d;T5;19.2;Treatment
c;T5;9.6;Treatment
b;T5;10;Treatment"data_m <- read.table(text=data_ori, header=T, sep=";", quote="")
head(data_m)
  Gene Group Expr Condition
1    a    T1  2.6   Control
2    b    T1 20.8   Control
3    c    T1 10.0   Control
4    d    T1  9.0   Control
5    a    T2  2.9   Control
6    b    T2  9.8   Control

首先看下每个基因在不同组的表达情况, facet_grid和facet_wrap可以对图形分面显示。

# scales: free_y 表示不同子图之间使用独立的Y轴信息
#         但x轴使用同样的信息。
#         其它可选参数有free_x, free, fixed
p <- ggplot(data_m, aes(x=Gene, y=Expr)) + geom_bar(stat="identity", position="dodge", aes(fill=Group)) +facet_grid(Condition~., scales="free_y")
p
# 如果没有图形界面,运行下面的语句把图存在工作目录下的Rplots.pdf文件中
#dev.off()

柱子有点多,也可以利用mean±SD的形式展现

# 获取平均值和标准差
# 分组时不只Gene一个变量了,还需要考虑Condition
data_m_sd_mean <- data_m %>% group_by(Gene, Condition) %>% dplyr::summarise(sd=sd(Expr), value=mean(Expr))
data_m_sd_mean <- as.data.frame(data_m_sd_mean)
data_m_sd_mean
  Gene Condition        sd value
1    a   Control 0.3781534  2.36
2    a Treatment 2.9978326  3.72
3    b   Control 7.5491721 12.10
4    b Treatment 4.8299068 12.44
5    c   Control 1.2837445 10.44
6    c Treatment 2.9458445  8.26
7    d   Control 3.1325708  8.74
8    d Treatment 6.8568943  9.22
p <- ggplot(data_m_sd_mean, aes(x=Gene, y=value)) + geom_bar(stat="identity", aes(fill=Gene)) +geom_errorbar(aes(ymin=value-sd, ymax=value+sd), width=0.2, position=position_dodge(width=0.75)) +facet_wrap(~Condition, ncol=1)
p

每组里面各个基因的相对表达, 纵轴的显示改为百分比

# position="fill" 展示的是堆积柱状图各部分的相对比例
# position="stack" 展示的是堆积柱状图的原始值,可以自己体现下看卡差别
p <- ggplot(data_m, aes(x=Group, y=Expr)) +geom_bar(stat="identity", position="fill", aes(fill=Gene)) +scale_y_continuous(labels = scales::percent) +facet_wrap(~Condition, ncol=1)
p

facet后,显示正常,不需要做特别的修改

在柱子中标记百分比值 (计算百分比值需要注意了, 文本显示位置还是跟之前一致)

# group_by: 按照给定的变量分组,然后按组操作
# mutate: 在当前数据表增加新变量
# 第一步增加每个组 (Group和Condition共同定义分组)的加和,第二步计算比例
data_m <- data_m %>% group_by(Group, Condition) %>% mutate(count=sum(Expr)) %>% mutate(freq=round(100*Expr/count,2))
p <- ggplot(data_m, aes(x=Group, y=Expr, group=Group)) +geom_bar(stat="identity", position="fill", aes(fill=Gene)) +scale_y_continuous(labels = scales::percent) +geom_text(aes(label=freq), position=position_fill(vjust=0.5)) +facet_wrap(~Condition, ncol=1)
p

文本显示位置没有问题,但柱子的位置有些奇怪,使得两组之间不可比。

先对数据做下排序,然后再标记文本

# with: 产生一个由data_m组成的局部环境,再这个环境里,列名字可以直接使用
data_m <- data_m[with(data_m, order(Condition, Group, Gene)),] 
p <- ggplot(data_m, aes(x=Group, y=Expr, group=Group)) +geom_bar(stat="identity", position="fill", aes(fill=Gene)) +scale_y_continuous(labels = scales::percent) +geom_text(aes(label=freq), position=position_fill(vjust=0.5)) +facet_wrap(~Condition, ncol=1)
p

这样两种条件下的比较更容易了

P17 R绘制柱状图、设置字体 01

P18 R绘制柱状图、设置字体 02

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/22385.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Audio PsyChat:web端语音心理咨询系统

这是一个在服务器本地运行的web语音心理咨询系统&#xff0c;咨询系统内核使用PsyChat&#xff0c;我们为其制作了Web前端&#xff0c;并拼接了ASR和TTS组件&#xff0c;使局域网内用户可以通过单纯的语音进行交互。其中ASR和TTS组件使用PaddleSpeech API。 使用 使用单卡3090…

信息学奥赛初赛天天练-19-挑战程序阅读-探索因数、所有因数平和、质数的奥秘

PDF文档公众号回复关键字:20240604 1 2023 CSP-J 阅读程序3 阅读程序&#xff08;程序输入不超过数组成字符串定义的范围&#xff1a;判断题正确填√&#xff0c;错误填&#xff1b;除特殊说明外&#xff0c;判断题1.5分&#xff0c;选择题3分&#xff0c;共计40分&#xff…

【微信支付】获取微信开发信息(全网最详细!!!)

前言 1、申请商户号 申请流程与资料 详细申请步骤 申请开通接入微信支付步骤 2、申请微信小程序 申请小程序步骤 查看小程序AppID 3、微信支付普通商户与AppID账号关联 4、获取开发中需要的密钥和证书 4.1、申请证书 4.2、下载证书工具 4.3、证书工具—填写商户信息…

【计算机毕设】基于SpringBoot的个人理财系统设计与实现 - 源码免费(私信领取)

免费领取源码 &#xff5c; 项目完整可运行 &#xff5c; v&#xff1a;chengn7890 诚招源码校园代理&#xff01; 1. 研究目的 个人理财管理对于现代人来说越来越重要&#xff0c;随着金融产品和消费方式的多样化&#xff0c;人们需要一个方便、高效、安全的工具来管理和规划自…

C语言基础学习之链表与共同体

数组: 数据结构---操作时候的特点&#xff1a; 优势&#xff1a;随机访问(存取)方便 不足&#xff1a;插入数据删除数据不方便 链式数据结构--链表 struct stu sl; // s1struct stu s2; // s2struct stu s3; //s3 s1-->s2-->s3 特点: 优势:增力和删除数据方便劣势…

【光谱特征选择】竞争性自适应重加权算法CARS(含python代码)

目录 一、背景 二、代码实现 三、项目代码 一、背景 竞争性自适应重加权算法&#xff08;Competitive Adaptive Reweighted Sampling&#xff0c;CARS&#xff09;是一种用于选择高光谱数据中最具代表性波段的方法。CARS通过模拟“生物进化”过程&#xff0c;自适应地对光谱…

Docker桥接网络分析

前言 《虚拟局域网(VLAN)》一文中描述了虚拟网卡、虚拟网桥的作用&#xff0c;以及通过iptables实现了vlan联网&#xff0c;其实学习到这里自然就会联想到目前主流的容器技术&#xff1a;Docker&#xff0c;因此接下来打算研究一下Docker的桥接网络与此有何异同。 猜测 众所周知…

计算机基础(8)——音频数字化(模电与数电)

&#x1f497;计算机基础系列文章&#x1f497; &#x1f449;&#x1f340;计算机基础&#xff08;1&#xff09;——计算机的发展史&#x1f340;&#x1f449;&#x1f340;计算机基础&#xff08;2&#xff09;——冯诺依曼体系结构&#x1f340;&#x1f449;&#x1f34…

如何在GlobalMapper中加载高清卫星影像?

GlobalMapper在GIS行业几乎无人不知&#xff0c;无人不晓&#xff0c;但它可以直接加载卫星影像也许就不是每个人都知道的了。 这里就来分享一下如何在GlobalMapper中加载高清卫星影像&#xff0c;并可以在文末查看领取软件安装包和图源的方法。 如何加载高清图源 首先&…

45-1 waf绕过 - 文件上传绕过WAF方法

环境准备: 43-5 waf绕过 - 安全狗简介及安装-CSDN博客然后安装dvwa靶场:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客打开dvwa靶场,先将靶场的安全等级调低,然后切换到文件上传 一、符号变异 在PHP中,由于其弱类型特性,有时候仅有一…

4月份新出!外网爆火的大模型黑书!内行人都在学~

今天给大家推荐一本4月份才新出的大型语言模型&#xff08;LLM&#xff09;的权威教程《基于GPT-3、ChatGPT、GPT-4等Transformer架构的自然语言处理》&#xff01;Google工程总监Antonio Gulli作序&#xff0c;一堆大佬推荐&#xff01;这含金量不用多说&#xff0c;在这里给大…

Docker容器搭建ELK日志分析系统

Docker容器搭建ELK日志分析系统 文章目录 Docker容器搭建ELK日志分析系统资源列表基础环境一、创建容器网络二、创建容器挂载目录三、构建systemctl镜像三、构建Elasticsearch镜像3.1、构建Elasticsearch3.2、构建镜像3.3、启动容器3.4、进入容器3.5、查看节点信息 四、构建Log…

Linux系统之mv命令的基本使用

Linux系统之mv命令的基本使用 一、mv命令介绍1. mv命令简介2. mv命令的使用结果 二、mv命令的使用帮助1. 在命令行的帮助信息2. mv常用选项 三、mv命令的基本使用1. 创建源目录和目标目录2. 新建测试文件3. 将源目录文件复制到目标目录4. 将文件进行改名5. 将目录的所有文件转移…

python长方形周长面积 2024年3月青少年编程电子学会python编程等级考试二级真题解析

目录 python长方形周长面积 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python长方形周长面积 2024年3月 python编程等级考试级编程题 一、…

matlab模拟太阳耀斑喷发

代码 function simulate_solar_flare% 参数设置gridSize 100; % 网格大小timeSteps 200; % 时间步数dt 0.1; % 时间步长% 初始化网格[X, Y] meshgrid(linspace(-5, 5, gridSize));Z zeros(size(X));% 设置耀斑初始位置和强度flareCenter [0, 0]; % 耀斑中心位置flareRad…

9 -力扣高频 SQL 50 题(基础版)

9 - 上升的温度 -- 找出与之前&#xff08;昨天的&#xff09;日期相比温度更高的所有日期的 id -- DATEDIFF(2007-12-31,2007-12-30); # 1 -- DATEDIFF(2010-12-30,2010-12-31); # -1select w1.id from Weather w1, Weather w2 wheredatediff(w1.recordDate,w2.recordDat…

SolidWorks功能强大的三维设计软件下载安装,SolidWorks最新资源获取!

SolidWorks&#xff0c;它凭借出色的三维建模能力&#xff0c;使得设计师们能够轻松构建出复杂且精细的机械模型&#xff0c;大大提升了设计效率和质量。 在机械设计领域&#xff0c;SolidWorks凭借其丰富的工具和特性&#xff0c;让设计师们能够随心所欲地挥洒创意。无论是零…

家政预约小程序12用户登录

目录 1 创建全局变量2 创建页面3 搭建页面4 实现登录逻辑总结 在小程序中&#xff0c;登录是一个常见的场景。比如我们在小程序预约或者购买时&#xff0c;通常要求用户先登录后购买。如果使用传统方案&#xff0c;登录这个动作其实最终的目的是为了获取用户的openid。而使用低…

Python学习圣经:从0到1,精通Python使用

尼恩&#xff1a;LLM大模型学习圣经PDF的起源 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;经常性的指导小伙伴们改造简历。 经过尼恩的改造之后&#xff0c;很多小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试机会&#x…

【智能体】文心智能体大赛第二季持续进行中,一起在智能体的海洋里发挥你的创意吧

目录 背景作文小助手AI迅哥问答程序员黄历助手比赛时间第二期赛题丰厚奖品评选说明获奖智能体推荐文章 背景 AI应用&#xff08;智能体&#xff09;&#xff0c;持续火热&#xff0c;一句话就能创建一个有趣、好玩的应用。 可以说一分钟内就能创建一个有创意的智能体。 看大多…