R语言绘图 --- 饼状图(Biorplot 开发日志 --- 2)
「写在前面」
在科研数据分析中我们会重复地绘制一些图形,如果代码管理不当经常就会忘记之前绘图的代码。于是我计划开发一个 R 包(Biorplot),用来管理自己 R 语言绘图的代码。本系列文章用于记录 Biorplot 包开发日志。
相关链接
相关代码和文档都存放在了 Biorplot GitHub 仓库:
https://github.com/zhenghu159/Biorplot
欢迎大家 Follow 我的 GitHub 账号:
https://github.com/zhenghu159
我会不定期更新生物信息学相关工具和学习资料。如果您有任何问题和建议,或者想贡献自己的代码,请在我的 GitHub 上留言。
介绍
饼状图,常用于展示数据的相对比例。饼状图以圆形图案为基础,将数据分成不同的扇区,每个扇区的大小代表相应数据的相对大小。饼状图可以直观地展示不同数据之间的比例关系,帮助观察者快速了解数据的分布情况。
在 Biorplot 中,我封装了 Bior_PiePlot() 函数来实现饼状图的绘制。
基础饼状图
绘制一个基础的饼状图如下:
绘图代码:
value <- c(0.1,0.2,0.4,0.1,0.3)
type <- c("A (10%)", "B (20%)", "C (40%)", "D (10%)", "E (30%)")
col <- c("#AEC7E8B2", "#FFBB78B2", "#98DF8AB2", "#FF9896B2", "#C5B0D5B2")
p <- Bior_PiePlot(value=value, type=type, col=col, title="Test Bior_pie")
p
带标签饼状图
绘制一个带有百分比标签的饼状图如下:
绘图代码:
value <- c(0.1,0.2,0.4,0.1,0.3)
type <- c("A", "B", "C", "D", "E")
label <- c("10%","20%","40%","10%","30%")
col <- c("#1F77B4B2", "#FF7F0EB2", "#2CA02CB2", "#D62728B2", "#9467BDB2")
p <- Bior_PiePlot(value=value, type=type, label=label, col=col, title="Test Bior_pie", label.x=1.2, label.color="white", label.size=5)
p
源码解析
Biorplot::Bior_PiePlot() 函数主要使用了 ggplot2 来绘制饼状图。使用 ggplot2::geom_text() 设置标签文本的显示,相关参数:
-
valueA vector of value -
typeA vector of type -
label(defaut: label=NULL); A vector of label -
col(defaut: col=pal_d3("category20,",alpha=0.7)(20)); colour for type -
title(defaut: title=""); title for plot -
text.size(defaut: text.size=15); text size -
plot.title.size(defaut: plot.title.size=20); plot.title size -
label.x(defaut: label.x=1.2); geom_text x for label -
label.color(defaut: label.color="white"); geom_text color for label -
label.size(defaut: label.size=5); geom_text size for label
源码:
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
#' Pie Plot
#' @description Create a Pie plot.
#'
#' @import ggplot2
#' @importFrom ggsci pal_d3
#'
#' @param value A vector of value
#' @param type A vector of type
#' @param label (defaut: label=NULL); A vector of label
#' @param col (defaut: col=pal_d3("category20,",alpha=0.7)(20)); colour for type
#' @param title (defaut: title=""); title for plot
#' @param text.size (defaut: text.size=15); text size
#' @param plot.title.size (defaut: plot.title.size=20); plot.title size
#' @param label.x (defaut: label.x=1.2); geom_text x for label
#' @param label.color (defaut: label.color="white"); geom_text color for label
#' @param label.size (defaut: label.size=5); geom_text size for label
#'
#' @return A ggplot object
#' @export
#'
#' @examples
#' # Examples 1
#' value <- c(0.1,0.2,0.4,0.1,0.3)
#' type <- c("A (10%)", "B (20%)", "C (40%)", "D (10%)", "E (30%)")
#' col <- c("#AEC7E8B2", "#FFBB78B2", "#98DF8AB2", "#FF9896B2", "#C5B0D5B2")
#' p <- Bior_PiePlot(value=value, type=type, col=col, title="Test Bior_pie")
#' p
#'
#' # Examples 2
#' value <- c(0.1,0.2,0.4,0.1,0.3)
#' type <- c("A", "B", "C", "D", "E")
#' label <- c("10%","20%","40%","10%","30%")
#' col <- c("#AEC7E8B2", "#FFBB78B2", "#98DF8AB2", "#FF9896B2", "#C5B0D5B2")
#' p <- Bior_PiePlot(value=value, type=type, label=label, col=col, title="Test Bior_pie",
#' label.x=1.2, label.color="white", label.size=5)
#' p
#'
Bior_PiePlot <- function(
value, type, label=NULL, col=pal_d3("category20",alpha=0.7)(20), title="",
text.size=15, plot.title.size=20,
label.x=1.2, label.color="white", label.size=5)
{
df <- data.frame(value=value, type=type)
df$label <- label
df$type <- factor(df$type, levels=type)
p <-
ggplot(df, aes(x='', y=value, fill=type)) +
geom_bar(stat="identity", width=1, color="white",
position = position_stack(reverse =T)) +
coord_polar("y", start=0) +
theme_void() +
theme(text = element_text(size = text.size),
plot.title = element_text(size=plot.title.size, hjust = 0.5),
legend.title = element_blank()) +
scale_fill_manual(values = col) +
labs(title = title)
if (!is.null(label)){
p <- p +
geom_text(aes(x = label.x, label = label), color = label.color, size=label.size,
position = position_stack(reverse =T, vjust=0.5))
}
return(p)
}
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
注:本文为个人学习笔记,仅供大家参考学习,不得用于任何商业目的。如有侵权,请联系作者删除。
本文由 mdnice 多平台发布
相关文章:
R语言绘图 --- 饼状图(Biorplot 开发日志 --- 2)
「写在前面」 在科研数据分析中我们会重复地绘制一些图形,如果代码管理不当经常就会忘记之前绘图的代码。于是我计划开发一个 R 包(Biorplot),用来管理自己 R 语言绘图的代码。本系列文章用于记录 Biorplot 包开发日志。 相关链接…...
用于日常任务的实用 Python 脚本
Python 是一种多功能编程语言,以其简单易读而闻名。它广泛应用于从 Web 开发到数据分析等各个领域。Python 脚本,它们可以通过自动执行常见任务来使您的生活更轻松。 用于日常任务的实用 Python 脚本 1. 使用 Pandas 进行数据分析2. 使用 BeautifulSoup …...
7-Zip是什么呢
1. 简介 7-Zip 是一个功能强大、免费开源的文件压缩和解压缩工具,适用于个人用户和企业用户,可以在多种操作系统上进行使用,并且支持广泛的压缩格式和高级功能。 2. 特点与优势 开源免费:7-Zip 是免费的开源软件,可…...
Satellite Stereo Pipeline学习
1.在Anaconda某个环境中安装s2p pip install s2p 2.在Ubuntu系统中安装s2p源代码 git clone https://github.com/centreborelli/s2p.git --recursive cd s2p pip install -e ".[test]" 3.在s2p中进行make all处理 中间会有很多情况,基本上哪个包出问题…...
linux-gpio
在Linux shell中测试GPIO通信,通常需要使用GPIO的设备文件,这些文件通常位于/sys/class/gpio目录下。要使用特定的GPIO引脚,比如GPIO92,你需要执行以下步骤: 导出GPIO引脚:首先,需要确保GPIO92已…...
C# 代码配置的艺术
文章目录 1、代码配置的定义及其在软件工程中的作用2、C# 代码配置的基本概念和工具3、代码配置的实践步骤4、实现代码配置使用属性(Properties)使用配置文件(Config Files)使用依赖注入(Dependency Injection…...
268 基于matlab的模拟双滑块连杆机构运动
基于matlab的模拟双滑块连杆机构运动,并绘制运动动画,连杆轨迹可视化输出,并输出杆件质心轨迹、角速度、速度变化曲线。可定义杆长、滑块速度,滑块初始位置等参数。程序已调通,可直接运行。 268 双滑块连杆机构运动 连…...
进口铝合金电动隔膜泵
进口铝合金电动隔膜泵是一种高效、可靠的工业泵,其特点、性能与应用广泛,以下是对其的详细分析: 特点 材质与结构: 采用铝合金材料制造,具有良好的耐腐蚀性和轻量化特点。铝合金材质使得泵体结构紧凑、轻便ÿ…...
G4 - 可控手势生成 CGAN
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 目录 代码总结与心得 代码 关于CGAN的原理上节已经讲过,这次主要是编写代码加载上节训练后的模型来进行指定条件的生成 图像的生成其实只需要使用…...
使用 DuckDuckGo API 实现多种搜索功能
在日常生活中,我经常使用搜索引擎来查找信息,如谷歌和百度。然而,当我想通过 API 来实现这一功能时,会发现这些搜索引擎并没有提供足够的免费 API 服务。如果有这样的免费 API, 就能定时获取“关注实体”的相关内容,并…...
【DrissionPage爬虫库 1】两种模式分别爬取Gitee开源项目
文章目录 DrissionPage爬虫库简介1. 浏览器操控模式(类似于游戏中的后台模拟鼠标键盘)2. 数据包收发模式(类似于游戏中的协议封包) 实战中学习需求:爬取Gitee开源项目的标题与描述解决方案1:用数据包方式获…...
leetcode 115.不同的子序列
思路:LCS类dp 这道题的思考思路其实就是把以两个字符串结尾作为状态方程。 dp[i][j]的意义就是在s字符串在以s[i]结尾的字符串的情况下,所能匹配出t字符串以t[j]结尾的字符串个数。 本质上其实是一个LCS类的状态方程,只不过是意义不一样了…...
二叉树的顺序实现-堆
一、什么是堆 在数据结构中,堆(Heap)是一种特殊的树形数据结构,用数组存储,通常被用来实现优先队列。 堆具有以下特点: 堆是一棵完全二叉树(Complete Binary Tree),即…...
【Maven】Maven主要知识点目录整理
1. Maven的基本概念 作者相关文章链接: 1、【Maven】简介_下载安装-CSDN博客 定义:Maven是Apache的一个开源项目,是Java开发环境中用于管理和构建项目,以及维护依赖关系的强大软件项目管理工具。作用:简化了项目依赖…...
Coolmuster Android Assistant: 手机数据管理的全能助手
在数字化时代,智能手机不仅是通讯工具,更是个人数据的中心。随着数据量的不断增加,如何有效管理和保护这些数据成为了一个重要议题。Coolmuster Android Assistant应运而生,它是一款专为安卓用户设计的综合数据管理软件࿰…...
03-树3 Tree Traversals Again(浙大数据结构PTA习题)
03-树3 Tree Traversals Again 分数 25 作者 陈越 An inorder binary tree traversal can be implemented in a non-recursive way with a stack. For example, suppose that when a 6-node binary tree (with the keys numbered from 1 to 6) is traversed, th…...
Java项目对接redis,客户端是选Redisson、Lettuce还是Jedis?
JAVA项目对接redis,客户端是选Redisson、Lettuce还是Jedis? 一、客户端简介1. Jedis介绍2. Lettuce介绍3. Redisson介绍 二、横向对比三、选型说明 在实际的项目开发中,对于一个需要对接Redis的项目来说,就面临着选择合适的Redis客…...
AngularJS Web前端框架:深入探索与应用实践
AngularJS Web前端框架:深入探索与应用实践 AngularJS,作为一款强大的Web前端框架,为开发者提供了丰富的功能和工具,使得构建复杂且交互性强的Web应用变得更为便捷。本文将从四个方面、五个方面、六个方面和七个方面对AngularJS进…...
SQL 入门:使用 MySQL 进行数据库操作
SQL 入门:使用 MySQL 进行数据库操作 目录 引言SQL 基础 SQL 语言概述MySQL 简介 数据库设计基础 数据库与表的设计常见数据类型 MySQL 安装与配置 安装 MySQL基本配置与连接 基本 SQL 语句 数据库的创建与删除表的创建、修改与删除数据插入、更新与删除 数据查询…...
window安装ffmpeg播放本地摄像头视频
1、安装ffmpeg ffmpeg官方网站:FFmpeg 下载后解压文件夹名为ffmpeg 2、设置环境变量 目录 1、安装ffmpeg 设置环境变量 以F:\software\after\ffmpeg\bin为例 在命令行中输入ffmpeg出现下方代表安装成功 3、通过ffmpeg播放本地电脑摄像头 鼠标右击开始按钮&…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...
若依项目部署--传统架构--未完待续
若依项目介绍 项目源码获取 #Git工具下载 dnf -y install git #若依项目获取 git clone https://gitee.com/y_project/RuoYi-Vue.git项目背景 随着企业信息化需求的增加,传统开发模式存在效率低,重复劳动多等问题。若依项目通过整合主流技术框架&…...
触发DMA传输错误中断问题排查
在STM32项目中,集成BLE模块后触发DMA传输错误中断(DMA2_Stream1_IRQHandler进入错误流程),但单独运行BLE模块时正常,表明问题可能源于原有线程与BLE模块的交互冲突。以下是逐步排查与解决方案: 一、问题根源…...
