当前位置: 首页 > news >正文

R语言绘图 --- 柱状图(Biorplot 开发日志 --- 3)

「写在前面」

在科研数据分析中我们会重复地绘制一些图形,如果代码管理不当经常就会忘记之前绘图的代码。于是我计划开发一个 R 包(Biorplot),用来管理自己 R 语言绘图的代码。本系列文章用于记录 Biorplot 包开发日志。


相关链接

相关代码和文档都存放在了 Biorplot GitHub 仓库:
https://github.com/zhenghu159/Biorplot

欢迎大家 Follow 我的 GitHub 账号:
https://github.com/zhenghu159

我会不定期更新生物信息学相关工具和学习资料。如果您有任何问题和建议,或者想贡献自己的代码,请在我的 GitHub 上留言。

介绍

柱状图,常用于使用矩形的长度作为变量来比较两个或多个值(在不同时间或不同条件下)。它通常用于分析较小的数据集。

Biorplot 中,我封装了 Bior_BarPlot() 函数来实现柱状图的绘制。

基础柱状图

绘制一个基础的柱状图如下:

alt

绘图代码:

df <- data.frame(
x = c("A", "B", "C"),
y = c(3, 2, 1))
Bior_BarPlot(df, "x", "y", fill = "steelblue", color = "steelblue")

堆叠柱状图

绘制堆叠柱状图并添加文本标签:

alt
df <- data.frame(
x = rep(c('sample1','sample2','sample3','sample4'), each=2),
y = c(20,16,29,16,14,11,22,21),
type = rep(c('gene1','gene2'), 4),
label = c(20,16,29,16,14,11,"","")
)
col <- c("#AEC7E8FF","#FFBB78FF")
Bior_BarPlot(df, "x", "y", fill = "type", color = "type", label = df$label,
palette = col, lab.pos = "in") +
theme(legend.position = "right", legend.key.size=unit(1, "cm"))

改变 position 绘制交错柱状图:

alt
Bior_BarPlot(df, "x", "y", fill = "type", color = "type", palette = col,
label = TRUE, position = position_dodge(0.9))

源码解析

Biorplot::Bior_LinePlot() 函数主要继承了 *ggpubr::ggbarplot()*函数。

源码:

#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

#' Bar plot
#' @description Create a stacked barplot.
#'
#' @importFrom ggpubr ggbarplot position_stack() theme_pubr()
#' @import ggplot2
#'
#' @inheritParams ggpubr::ggbarplot
#'
#' @return A ggplot object
#' @export
#'
#' @examples
#' # Examples 1
#' df <- data.frame(
#' x = c("A", "B", "C"),
#' y = c(3, 2, 1))
#' Bior_BarPlot(df, "x", "y", fill = "steelblue", color = "steelblue")
#'
#' # Examples 2
#' df <- data.frame(
#' x = rep(c('sample1','sample2','sample3','sample4'), each=2),
#' y = c(20,16,29,16,14,11,22,21),
#' type = rep(c('gene1','gene2'), 4),
#' label = c(20,16,29,16,14,11,"","")
#' )
#' col <- c("#AEC7E8FF","#FFBB78FF")
#' Bior_BarPlot(df, "x", "y", fill = "type", color = "type", label = df$label,
#' palette = col, lab.pos = "in") +
#' theme(legend.position = "right", legend.key.size=unit(1, "cm"))
#'
#' # Examples 3
#' Bior_BarPlot(df, "x", "y", fill = "type", color = "type", palette = col,
#' label = TRUE, position = position_dodge(0.9))
#'
Bior_BarPlot <- function(data, x, y, combine = FALSE, merge = FALSE,
color = "black", fill = "white", palette = NULL,
size = NULL, width = NULL,
title = NULL, xlab = NULL, ylab = NULL,
facet.by = NULL, panel.labs = NULL, short.panel.labs = TRUE,
select = NULL, remove = NULL, order = NULL,
add = "none", add.params = list(), error.plot = "errorbar",
label = FALSE, lab.col = "black", lab.size = 4,
lab.pos = c("out", "in"), lab.vjust = NULL, lab.hjust = NULL,
lab.nb.digits = NULL,
sort.val = c("none", "desc", "asc"), sort.by.groups = TRUE,
top = Inf,
position = position_stack(),
ggtheme = theme_pubr(),
...)
{
# Default options
.opts <- list(
data = data, x = x, y = y, combine = combine, merge = merge,
color = color, fill = fill, palette = palette,
size = size, width = width,
title = title, xlab = xlab, ylab = ylab,
facet.by = facet.by, panel.labs = panel.labs, short.panel.labs = short.panel.labs,
select = select , remove = remove, order = order,
add = add, add.params = add.params, error.plot = error.plot,
label = label, lab.col = lab.col, lab.size = lab.size,
lab.pos = lab.pos, lab.vjust = lab.vjust, lab.hjust = lab.hjust,
lab.nb.digits = lab.nb.digits,
sort.val = sort.val, sort.by.groups = sort.by.groups, top = top,
position = position, ggtheme = ggtheme, ...)

p <- do.call(ggpubr::ggbarplot, .opts)

return(p)
}

#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

「结束」

注:本文为个人学习笔记,仅供大家参考学习,不得用于任何商业目的。如有侵权,请联系作者删除。

alt

本文由 mdnice 多平台发布

相关文章:

  • Tree——输出项目的文件结构(Linux)
  • 多项目的.net core解决方案(项目间引用)如何使用Docker部署
  • keepalived安装文档
  • Python知识点11---高阶函数
  • 冒泡排序与快速排序
  • C#中的值类型与引用类型
  • 计算机毕业设计 | SpringBoot+vue仓库管理系统(附源码)
  • 欧科云链:Web3.0时代 具备链上数据分析能力的公司愈发凸显其价值
  • JCR一区级 | Matlab实现TCN-BiGRU-MATT时间卷积双向门控循环单元多特征分类预测
  • 解释Python中的PEP 8是什么 为什么它很重要
  • 基于Chisel的FPGA流水灯设计
  • ios:文本框默认的copy、past改成中文复制粘贴
  • 平移数据c++
  • 【吊打面试官系列】Java高并发篇 - 什么是自旋 ?
  • js实现基础购物车的制作
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • angular2开源库收集
  • Bytom交易说明(账户管理模式)
  • const let
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • gcc介绍及安装
  • HTML5新特性总结
  • HTML-表单
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • Terraform入门 - 3. 变更基础设施
  • 分享几个不错的工具
  • 复习Javascript专题(四):js中的深浅拷贝
  • 力扣(LeetCode)357
  • 那些被忽略的 JavaScript 数组方法细节
  • 排序(1):冒泡排序
  • 前端技术周刊 2019-01-14:客户端存储
  • 深入 Nginx 之配置篇
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 数据可视化之下发图实践
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (160)时序收敛--->(10)时序收敛十
  • (PySpark)RDD实验实战——求商品销量排行
  • (层次遍历)104. 二叉树的最大深度
  • (分布式缓存)Redis分片集群
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (十一)图像的罗伯特梯度锐化
  • (算法设计与分析)第一章算法概述-习题
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (一)、软硬件全开源智能手表,与手机互联,标配多表盘,功能丰富(ZSWatch-Zephyr)
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转载)CentOS查看系统信息|CentOS查看命令
  • .axf 转化 .bin文件 的方法
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?