当前位置:网站首页>【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很好的结合,后续专门对统计分析进行梳理
边栏推荐
猜你喜欢

输出一个整数的二进制形式

With 1000 lines of code statistics after the xi 'an housing prices, I have a startling discovery...

阿里大牛最新总结分享的高并发编程核心笔记(终极版),高并发系统架构场景一应俱全

552个元宇宙App,70个搞社交,哪款真能交到朋友?

线程的状态

将移位距离和假设外推到非二值化问题

Huffman tree

Petri网-2、有向网

162_Power Query is a custom function for quickly merging tables in a folder TableXlsxCsv_2.0

淘特:引擎还是包袱?
随机推荐
【二叉树】统计最高分的节点数目
蚁剑加密 WebShell 过杀软
使用华为HECS云服务器打造Telegraf+Influxdb+Grafana 监控系统【华为云至简致远】
可视化数据库设计软件有哪些_数据库可视化编程
QImageReader
Nanoprobes Ni-NTA-Nanogold——用于 His 标签标记和检测
ITSM软件与工单系统的区别是什么?
Day1:面试必考真题
varchar2和varchar2(char)_datetime数据类型
中国菜刀原理与实践
如何在 UE4 中制作一扇自动开启的大门
Petri net-2, directed net
升级农企业务运营建设,智慧供应链管理平台打造“共赢生态链”
15年软件架构师经验总结:在ML领域,初学者踩过的5个坑
APT组织最喜欢的工具 Cobalt Strike (CS) 实战
利用华为云ECS服务器搭建安防视频监控平台【华为云至简致远】
W11的右键如何改成和W10一样?(一行命令即可解决!)
网络通信的过程
【二叉树】从二叉树一个节点到另一个节点每一步的方向
回流和重绘