当前位置:网站首页>【R语言科研绘图】--- 柱状图
【R语言科研绘图】--- 柱状图
2022-08-03 14:06:00 【生信小鹏】
R语言科研绘图——柱状图
前言
使用R语言绘制能够发表的图片,ggplot2是一个很好的选择。并且一些基于ggplot2开发的包,能够达到这个目标。graphpad prism做出来的图深得大家喜爱,因此本系列的文章就利用R语言ggprism这个包进绘制

一、柱状图
柱状图在绘图中经常使用到,例如PCR的数据结果,绘制过程如下
二、使用工具
1.所使用的包
为了科研绘图的美观,所以使用了ggprism这个包的绘制,能够绘制出和graphpad prism类似的效果,便于放在论文中发表
2.数据特征
使用的是R自带的ToothGrowth数据,包含了三个数据len是指牙生长的长度supp factor指的是给予的干扰因素,其中包括了VC和橘子汁dose 指的是给予干扰因素的剂量
3.绘图
3.1 两组均值之间的比较
先把柱状图画出来

代码如下:
df_p_val <- rstatix::t_test(ToothGrowth, len ~ supp) %>%
rstatix::add_x_position()
p <- ggplot(ToothGrowth, aes(x = factor(supp), y = len)) +
stat_summary(geom = "col", fun = mean) +
stat_summary(geom = "errorbar",
fun = mean,
fun.min = function(x) mean(x) - sd(x),
fun.max = function(x) mean(x) + sd(x),
width = 0.3) +
theme_prism() +
coord_cartesian(ylim = c(0, 35)) +
scale_y_continuous(breaks = seq(0, 35, 5), expand = c(0, 0))
加上统计结果
这里使用rstatix这个包里面的函数进行计算。
rstatix这个包的特点是能够和tidyverse类似,能够使用管道符进行计算,便于和tidyverse进行对接

代码如下:
df_p_val <- rstatix::t_test(ToothGrowth, len ~ supp) %>%
rstatix::add_x_position()
p + add_pvalue(df_p_val, y.position = 30)
缺少颜色,加上颜色

p <- ggplot(ToothGrowth,
aes(x = factor(supp), y = len)
) +
stat_summary(geom = "col", aes(fill = factor(supp)),fun = mean) +
stat_summary(geom = "errorbar", colour = 'red',
fun = mean,
fun.min = function(x) mean(x) - sd(x),
fun.max = function(x) mean(x) + sd(x),
width = 0.3) +
theme_prism() +
coord_cartesian(ylim = c(0, 35)) +
scale_y_continuous(breaks = seq(0, 35, 5), expand = c(0, 0))
p
p+ add_pvalue(df_p_val, y.position = 30)
需要注意的是,在添加颜色的时候,是在
stat_summary当中添加aes(fill = factor(supp),如果添加到ggplot函数中,后面的统计结果又加不上去。
去除图例
因为图片的下方已经有了内容,反而图例显得多余,所以就去除掉图例。使用的是ggplot2绘制,因此按如下方法即可:

p + theme(legend.position = 'none')+
add_pvalue(df_p_val, y.position = 30)
3.2 多组均值之间的比较
依然使用ToothGrowth 这个数据,比较不同的剂量之间生长的差异。总共有三组不同的剂量,这属于多组比较,这就需要确定一个比照的参照系。
单纯的出图,是这个样子
代码如下:
p <- ToothGrowth %>%
ggplot(aes(x = factor(dose), y = len)) +
stat_summary(geom = "col", fun = mean) +
stat_summary(geom = "errorbar",
fun = mean,
fun.min = function(x) mean(x) - sd(x),
fun.max = function(x) mean(x) + sd(x),
width = 0.3) +
theme_prism() +
coord_cartesian(ylim = c(0, 40)) +
scale_y_continuous(breaks = seq(0, 40, 5), expand = c(0, 0))
p
加上统计数据,两种方式
代码如下
df_p_val <-
rstatix::t_test(ToothGrowth, len ~ dose, ref.group = "0.5") %>%
rstatix::add_xy_position()
p1 <- p + add_pvalue(df_p_val, label = "p.adj.signif")
p2 <- p + add_pvalue(df_p_val, label = "p.adj.signif", remove.bracket = TRUE)
颜色太单一,更换颜色
代码如下:
p <- ToothGrowth %>%
ggplot(aes(x = factor(dose), y = len)) +
stat_summary(geom = "col", fun = mean,aes(fill = factor(dose))) +
stat_summary(geom = "errorbar",
fun = mean,
fun.min = function(x) mean(x) - sd(x),
fun.max = function(x) mean(x) + sd(x),
width = 0.3) +
theme_prism() +
coord_cartesian(ylim = c(0, 40)) +
scale_y_continuous(breaks = seq(0, 40, 5), expand = c(0, 0))
p + theme(legend.position = 'none')
加上统计数据
df_p_val <- rstatix::t_test(ToothGrowth, len ~ dose, ref.group = "0.5") %>%
rstatix::add_xy_position()
p <- ToothGrowth %>%
ggplot(aes(x = factor(dose), y = len)) +
stat_summary(geom = "col", fun = mean,aes(fill = factor(dose))) +
stat_summary(geom = "errorbar",
fun = mean,
fun.min = function(x) mean(x) - sd(x),
fun.max = function(x) mean(x) + sd(x),
width = 0.3) +
theme_prism() +
coord_cartesian(ylim = c(0, 40)) +
scale_y_continuous(breaks = seq(0, 40, 5), expand = c(0, 0))
p1 <- p +theme(legend.position = 'none') + add_pvalue(df_p_val, label = "p.adj.signif")
p2 <- p+theme(legend.position = 'none') + add_pvalue(df_p_val, label = "p.adj.signif", remove.bracket = TRUE)
后记
以上是使用R进行绘制柱状图并且加上统计分析的过程,其中一些细节改变图例,更换颜色,导出图片,改变坐标轴 等等没有细致说明,可以进行细微调节。另外,统计分析使用了rstatix这个包,能够和tidyverse很好的结合,后续专门对统计分析进行梳理
边栏推荐
猜你喜欢

secureCRT连接开发板连接不上问题解决

Role usage in Ansible

基于.NET 6 的开源访客管理系统

MySQL【存储过程与函数】

你把 vite打包 玩明白

数字孪生的4个最佳实践

162_Power Query 快速合并文件夹中表格之自定义函数 TableXlsxCsv_2.0

APT组织最喜欢的工具 Cobalt Strike (CS) 实战

HCIP Fifteenth Day Notes (Three-layer Architecture of Enterprise Network, VLAN and VLAN Configuration)

Nanoprobes EnzMet - 酶金相相关介绍及应用
随机推荐
树莓派 USB摄像头 实现网络监控( MJPG-Streamer)
为什么手动启动GBase 8c数据库中GTM节点
关于 vditor 可否同步飞书文档问题
162_Power Query 快速合并文件夹中表格之自定义函数 TableXlsxCsv_2.0
How to use matlab to implement the piecewise function "recommended collection"
系统学习Shell之正则表达式
利用 NFT 释放网站的潜力
国产替代风潮下,电子元器件B2B商城系统如何助力企业突围市场竞争
UE4 解决C盘缓存问题
Ansible中的角色使用
使用域名注册服务 Domains配置域名【华为云至简致远】
System learning Shell regular expressions
Top 10 free proxy IP software_Domestic static IP proxy software
中国菜刀原理与实践
15 years of software architect experience summary: In the ML field, 5 pits that beginners have stepped on
网络数据集-骨干网和校园网-IP流量
PostgreSQL V14中更好的SQL函数
OpenHarmony高校技术俱乐部计划发布
MySQL知识总结 (十二) 数据库相关概念
大势,又一关乎中美竞争的关键行业,走到关键时刻了