R语言ggplot2可视化:分组堆叠条形图,展示不同分组的多个处理数据特征,动态交互式条形图

news2025/1/16 11:14:53

在实验数据可视化过程中,经常需要对多个样本在多个处理条件下多种指标进行比较,使用下面这种分组堆叠条形图能从多个角度同时展示数据特征。

alt

备注:图中横轴以“0”为界左右分为两部分,可以用来表示处理A和处理B,纵轴表示样品,每行条形图中不同颜色分别代表不同类型的指标。

今天分享的内容是在R语言中绘制该图的方法,包括数据的整理准备过程,以及绘图所用的代码,所有数据均随机生成,无实际意义。

alt

使用R语言中plotly包可以将堆叠条形图转换为交互式动态图,鼠标移动时即可显示每个彩色小条的具体信息,方便进行数据探索和挖掘。

数据准备与环境加载

library(tidyverse)
library(ggtext)
library(magrittr)
library(ggprism)
library(MetBrewer)
library(plotly)

以上是绘图所用到的一些R包,主要是使用R语言中ggplot绘图体系,动态交互使用plotly实现。

随机生成测试数据

df <- as.data.frame(matrix(nrow = 1000,ncol = 4))
df$V1[1:500] <- runif(500,min = 10,max = 30)
df$V1[501:800] <- runif(300,min = 50,max = 100)
df$V1[801:1000] <- runif(200,min = 90,max = 120)

第一列数字是随机生成的1000个值,用于映射绘图时每个条形图的长度。

对数据进行随机分组和分类

df$V2[sample(1000,400)] <- "A"
df$V2[is.na(df$V2)] <- "B"
-------------------------------
df$V3[1:100] <- "Type 1"
df$V3[101:200] <- "Type 2"
df$V3[201:300] <- "Type 3"
df$V3[301:400] <- "Type 4"
df$V3[401:500] <- "Type 5"
df$V3[501:600] <- "Type 6"
df$V3[601:700] <- "Type 7"
df$V3[701:900] <- "Type 8"
df$V3[901:1000] <- "Type 9"

第二列分随机分成A和B两组,用来表示处理前和处理后,或者其他分组处理。第三类添加分类信息,绘图时用不同颜色映射不同分类。

添加样品名称并整理表格

df$V4 <- rep(paste0("Sam",1:25),40)
df$V4 <- factor(df$V4,levels = c(paste0("Sam",1:25)))
colnames(df) <- c("value","group","type","class")

整理完成之后,数据格式如下:

alt

绘制堆叠条形图

df %>% 
    ggplot(aes(y=class,x = ifelse(group == "A",-value,value),fill =type)) + 
    geom_bar(stat = "identity",position = "stack")
alt

先使用最基础的条形图进行绘制,已经能大概看到雏形了,主要是颜色的区别,接下来调整颜色。

p <- df %>% 
    ggplot(aes(y=class,x = ifelse(group == "A",-value,value),fill =type)) + 
    geom_bar(stat = "identity",position = "stack")+
    scale_fill_manual(values=met.brewer("Cassatt2",9))+
    scale_x_continuous(guide = "prism_minor",expand = c(0,0),limits=c(-1500,2000),
                       breaks=seq(-1500,1500,300))+
    geom_vline(xintercept = 0,linetype = 2)+ # 添加垂直线
    labs(x="Some test value",y="Some Sample ID")
alt

然后在进行稍微的美化,添加上主题设置代码,即可大功告成。

p <- p + theme(axis.text.y=element_text(color="black",size=8,margin=margin(r=1)),
          axis.text.x=element_text(color="black",size=9,margin=margin(t=8)),
          axis.title.x = element_text(size=11,margin=margin(t=8),color="black",face="bold"),
          plot.margin=unit(c(0.3,0.3,0.3,0.3),units=,"cm"), 
          panel.background = element_blank(),   
          prism.ticks.length.y = unit(2, "pt"),
          prism.ticks.length.x = unit(-5, "pt"),
          axis.line = element_line(color="black"),
          axis.ticks.length.x = unit(-.2, "cm"),
          legend.key = element_blank(),
          legend.background = element_blank(),
          legend.title = element_blank(),
          legend.text=element_text(size=8,color="black"),
          legend.spacing.x=unit(0.1,'cm'),
          legend.key.width=unit(0.4,"cm"),
          legend.key.height=unit(0.4,"cm"),
          legend.position = c(0.001,1.02), # 定义图例位置
          legend.justification = c(0,1)
    )
alt

还有一个隐藏小细节,在上图中标注分组“A”和“B”,使用annotate功能添加。

p <- p + annotate(geom="text",y=5,x=-1200,label="A",size=4,fontface="bold")+
    annotate(geom="text",y=5,x=1700,label="B",size=4,fontface="bold")
alt

动态交互图

通过刚刚的绘图过程已经得到了一个ggplot2对象,使用plotly即可对其进行转换,变为交互式图像。

plotly::ggplotly(p)
alt

至此,感谢您的阅读!如果您喜欢本文分享的可视化方法,欢迎转发分享给更多朋友,如需获得本文测试数据和代码,后台联系即可免费下载。

参考资料:https://mp.weixin.qq.com/s/GPQ5LPSlU6yq08nOb3t5Qg

本文由 mdnice 多平台发布

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

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

相关文章

AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82

篇头 最近写文章&#xff0c;反复多次折腾AOSP代码&#xff0c;因通过网络repo sync aosp代码&#xff0c;能一次顺利下载的概率很低&#xff0c;以前就经常遇到&#xff0c;但从未总结&#xff0c;导致自己也要回头检索方法&#xff0c;所以觉得可以总结一下&#xff0c;涉及…

python+django疾病健康知识科普推荐系统

基于智能推荐的卫生健康系统通过信息化技术,研究健康管理倌息的获取、传输、处理和反馈,实现区域一体化协同医疗健康服务,建立高品质与高效率的健康监测、疾病防治服务体系、健康生活方式与健康风险评价体系,达到改善健康状况、防治常见和慢性疾病的发生和发展、提高生命质量、…

docker笔记1-安装与基础命令

docker的用途&#xff1a; 可以把应用程序代码及运行依赖环境打包成镜像&#xff0c;作为交付介质&#xff0c;在各种环境部署。可以将镜像&#xff08;image&#xff09;启动成容器&#xff08;container&#xff09;&#xff0c;并提供多容器的生命周期进行管理&#xff08;…

Netty-2-数据编解码

解析编解码支持的原理 以编码为例&#xff0c;要将对象序列化成字节流&#xff0c;你可以使用MessageToByteEncoder或MessageToMessageEncoder类。 这两个类都继承自ChannelOutboundHandlerAdapter适配器类&#xff0c;用于进行数据的转换。 其中&#xff0c;对于MessageToMe…

数据结构-如何巧妙实现一个栈?逐步解析与代码示例

文章目录 引言1.栈的基本概念2.选择数组还是链表&#xff1f;3. 定义栈结构4.初始化栈5.压栈操作6.弹栈操作7.查看栈顶和判断栈空9.销毁栈操作10.测试并且打印栈内容栈的实际应用结论 引言 栈是一种基本但强大的数据结构&#xff0c;它在许多算法和系统功能中扮演着关键角色。…

智能优化算法应用:基于天鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于天鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于天鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.天鹰算法4.实验参数设定5.算法结果6.参考文献7.MA…

oracle恢复分片和非分片备份?

分片备份命令参考&#xff1a;适合大数据库并行备份提高备份速度 对于超大数据库&#xff0c;混合有小文件和大文件表空间&#xff0c;section size 表示分片&#xff0c;大小一般大于32G&#xff0c;可结合通道数量设置最佳值。 run { allocate channel t1 type disk; alloc…

PostGreSQL:货币类型

货币类型&#xff1a;money money类型存储固定小数精度的货币数字&#xff0c;小数的精度由数据库的lc_monetary设置决定。windows系统下&#xff0c;该配置项位于/data/postgresql.conf文件中&#xff0c;默认配置如下&#xff0c; lc_monetary Chinese (Simplified)_Chi…

redis基本用法学习(C#调用CSRedisCore操作redis)

除了NRedisStack包&#xff0c;csredis也是常用的redis操作模块&#xff08;从EasyCaching提供的常用redis操作包来看&#xff0c;CSRedis、freeredis、StackExchange.Redis应该都属于常用redis操作模块&#xff09;&#xff0c;本文学习使用C#调用CSRedis包操作redis的基本方式…

【Spring Security】打造安全无忧的Web应用--使用篇

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Spring Security的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.Spring Security中的授权是…

阿贝云云服务器

最近&#xff0c;我有幸获得了阿贝云提供的免费云服务器&#xff0c;阿贝云_免费云服务器、高防服务器、虚拟主机、免费空间、免费vps主机服务商!并在使用过程中有了一些深刻的体验和感受。在这篇博客中&#xff0c;我将分享我对阿贝云免费云服务器的使用感受和评价。 首先&am…

【iOS】UICollectionView

文章目录 前言一、实现简单九宫格布局二、UICollectionView中的常用方法和属性1.UICollectionViewFlowLayout相关属性2.UICollectionView相关属性 三、协议和代理方法&#xff1a;四、九宫格式的布局进行升级五、实现瀑布流布局实现思路实现原理代码调用顺序实现步骤实现效果 总…

需求分析工程师岗位的职责描述(合集)

需求分析工程师岗位的职责描述1 职责&#xff1a; 1&#xff0c;负责需求调研&#xff0c;对需求进行分析&#xff0c;编写解决方案、需求规格说明书等 2&#xff0c;根据需求制作原型&#xff0c;并负责原型展示以及客户沟通等工作 3&#xff0c;负责向技术团队精确地传达业务…

排序算法——桶排序

把数据放进若干个桶&#xff0c;然后在桶里用其他排序&#xff0c;近乎分治思想。从数值的低位到高位依次排序&#xff0c;有几位就排序几次。例如二位数就排两次&#xff0c;三位数就排三次&#xff0c;依次按照个十百...的顺序来排序。 第一次排序&#xff1a;50 12 …

Unity手机移动设备重力感应

Unity手机移动设备重力感应 一、引入二、介绍三、测试成果X Y轴Z轴横屏的手机&#xff0c;如下图竖屏的手机&#xff0c;如下图 一、引入 大家对重力感应应该都不陌生&#xff0c;之前玩过的王者荣耀的资源更新界面就是使用了重力感应的概念&#xff0c;根据手机的晃动来给实体…

EPROM 作为存储器的 8 位单片机

一、基本概述 TX-P01I83 是以 EPROM 作为存储器的 8 位单片机&#xff0c;专为多 IO 产品的应用而设计&#xff0c;例如遥控器、风扇/灯光控制或是 玩具周边等等。采用 CMOS 制程并同时提供客户低成本、高性能等显着优势。TX-P01I83 核心建立在 RISC 精简指 令集架构可以很容易…

SQL优化-深入了解SQL处理流程原理(Server层与存储引擎交互、数据管理结构)

做SQL优化的前提就必须要清楚当一个SQL被发送到Mysql时&#xff0c;它的处理流程。下面通过一个SQL优化分析过程来详细了解Mysql对SQL执行流程原理。 1、Mysql架构 在上篇文章中已经做了简单架构介绍&#xff0c;Mysql架构分为两个大的组件&#xff1a;Server层、存储层 Mysq…

vue3项目 - Eslint 配置代码风格

Eslint 自定义配置 总结&#xff1a; Prettier &#xff08;代码规范的插件&#xff0c;格式化 &#xff09;---> 美观 Eslint &#xff08;规范、纠错、检验错误 &#xff09;-----> 纠错 首先&#xff0c;禁用 Prettier 插件&#xff0c;安装 ESLint 插件&#x…

【量化金融】证券投资学

韭菜的自我修养 第一章&#xff1a; 基本框架和概念1.1 大盘底部形成的技术条件1.2 牛市与熊市1.3 交易系统1.3.1 树懒型交易系统1.3.2 止损止损的4个技术 第二章&#xff1a;证券家族4兄弟2.1 债券&#xff08;1&#xff09;债券&#xff0c;是伟大的创新&#xff08;2&#x…

案例147:基于微信小程序的酒店管理系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…