R语言绘制环状柱状堆积图+分组+显著性

news2024/11/25 13:54:08

无叠加、显著性的代码:

#设置工作环境
rm(list=ls())
setwd("D:/Desktop/0000/code-main/条形图")

#加载R包
library(ggplot2) # Create Elegant Data Visualisations Using the Grammar of Graphics
library(tidyverse) # Easily Install and Load the 'Tidyverse'

#加载数据(随机编写,无实际意义)
df <- read.table("无叠加.csv", header = T, sep = ",")
head(df)
df$group <- factor(df$group,levels = c("M","N","G","F")) # 这几个字母表示不同的组,对应数据表格的第一个大组:group
head(df)

# ----------------------------------------
##计算标签角度
df2 <- as.data.frame(df[c(1:10,11:22,23:34,35:46,47:48),])  # 重点:分别为不同组的对应的行。注意对应数据理解
rownames(df2) <- 1:48
df2$group <- factor(df2$group,levels = c("M","N","G","F"))
df2$ID <- as.numeric(rownames(df2))
number_of_bar <- nrow(df2)
angle <-  90 - 360 * (df2$ID-0.5) /number_of_bar
df2$hjust<-ifelse(angle < -90, 1, 0)
df2$angle<-ifelse(angle < -90, angle+180, angle)
#创建标签数据及位置
df3 <- df2 %>% 
  group_by(group) %>% 
  summarize(start=min(ID), end=max(ID) - 4) %>% 
  rowwise() %>% 
  mutate(title=mean(c(start, end)))
df3$group <- factor(df3$group,levels = c("M","N","G","F"))

# ----------------------------------------
#绘图
ggplot()+
  #手动添加辅助线
  geom_hline(yintercept = 0,lty="solid", color = "black",linewidth=0.6)+
  geom_hline(yintercept = 20,lty="solid", color = "grey80")+
  geom_hline(yintercept = 60,lty="solid", color = "grey80")+
  geom_hline(yintercept = 40,lty="solid", color = "grey80")+
  geom_hline(yintercept = 80,lty="solid", color = "grey80")+
  geom_hline(yintercept = 100,lty="solid", color = "grey80")+
  #柱状堆积图绘制
  geom_col(df, mapping=aes(group3, value, fill = group), color = "grey20", linewidth = 0.25, width = 0.8)+
  # y轴范围确定
  scale_y_continuous(limits = c(-25,150))+
  # 颜色
  scale_fill_manual(values = c("#4fbb98","#f46024","#dd6ab0","#7c8ebe"))+
  # 主题
  theme_void()+
  theme(legend.position = 'none'
  )+
  # 手动添加显著性
  geom_text(data=df2, aes(x=ID, y=103, label=c("Contral", "ADOM", "LHy1","LHA", "LFA","SHy1","SHA","SFA","RHy1","RHA","  "," ",
                                               "Contral", "ADOM", "LHy1","LHA", "LFA","SHy1","SHA","SFA","RHy1","RHA","  ","  ",
                                               "Contral", "ADOM", "LHy1","LHA", "LFA","SHy1","SHA","SFA","RHy1","RHA","  ","  ",
                                               "Contral", "ADOM", "LHy1","LHA", "LFA","SHy1","SHA","SFA","RHy1","RHA","  ","  "),
                          hjust=hjust,color=group),
            fontface="bold", size=3,
            angle= df2$angle, inherit.aes = F)+
  
  #手动添加坐标
  geom_text(data=df2, x=-0.3,y=5,label="0",color="black",size=3)+
  geom_text(data=df2, x=-0.3,y=25,label="20",color="black",size=3)+
  geom_text(data=df2, x=-0.3,y=45,label="40",color="black",size=3)+
  geom_text(data=df2, x=-0.3,y=65,label="60",color="black",size=3)+
  geom_text(data=df2, x=-0.3,y=85,label="80",color="black",size=3)+
  geom_text(data=df2, x=-0.3,y=105,label="100",color="black",size=3)+
  #极坐标转换
  coord_polar(direction=1)+
  ##分组标签
  geom_text(data=df3, aes(x = title, y = 140, label=group,color=group), 
            hjust=c(1,1,0,0), angle=c(335,250,135,60), size=5, 
            fontface="bold", inherit.aes = F)+
  #颜色
  scale_color_manual(values = c("#4fbb98","#f46024","#dd6ab0","#7c8ebe"))

带叠加、显著性的代码:

#设置工作环境
rm(list=ls())
setwd("D:/Desktop/0000/code-main/条形图")

#加载R包
library(ggplot2) # Create Elegant Data Visualisations Using the Grammar of Graphics
library(tidyverse) # Easily Install and Load the 'Tidyverse'

#加载数据(随机编写,无实际意义)
df <- read.table("叠加.csv", header = T, sep = ",")
head(df)
df$group <- factor(df$group,levels = c("M","N","G","F")) # 这几个字母表示不同的组,对应数据表格的第一个大组:group
head(df)

# ----------------------------------------
##计算标签角度
df2 <- as.data.frame(df[c(1:10,51:62,103:114,155:166,207:208),]) 
rownames(df2) <- 1:48
df2$group <- factor(df2$group,levels = c("M","N","G","F"))
df2$ID <- as.numeric(rownames(df2))
number_of_bar <- nrow(df2)
angle <-  90 - 360 * (df2$ID-0.5) /number_of_bar
df2$hjust<-ifelse(angle < -90, 1, 0)
df2$angle<-ifelse(angle < -90, angle+180, angle)
#确定显著性标签位置
result <- aggregate(value ~ group3, data = df, sum)
#创建标签数据及位置
df3 <- df2 %>% 
  group_by(group) %>% 
  summarize(start=min(ID), end=max(ID) - 4) %>% 
  rowwise() %>% 
  mutate(title=mean(c(start, end)))
df3$group <- factor(df3$group,levels = c("M","N","G","F"))

# ----------------------------------------
#绘图
ggplot()+
  #手动添加辅助线
  geom_hline(yintercept = 0,lty="solid", color = "black",linewidth=0.6)+
  geom_hline(yintercept = 20,lty="solid", color = "grey80")+
  geom_hline(yintercept = 60,lty="solid", color = "grey80")+
  geom_hline(yintercept = 40,lty="solid", color = "grey80")+
  geom_hline(yintercept = 80,lty="solid", color = "grey80")+
  geom_hline(yintercept = 100,lty="solid", color = "grey80")+
  #柱状堆积图绘制
  geom_col(df, mapping=aes(group3, value, fill = group), color = "grey20", linewidth = 0.5, width = 0.8)+
  #y轴范围确定
  scale_y_continuous(limits = c(-25,150))+
  #颜色
  scale_fill_manual(values = c("#4fbb98","#f46024","#dd6ab0","#7c8ebe"))+
  #主题
  theme_void()+
  theme(legend.position = 'none'
  )+
  #手动添加显著性
  geom_text(data=df2, aes(x=ID, y=103, label=c("Contral", "ADOM", "LHy1","LHA", "LFA","SHy1","SHA","SFA","RHy1","RHA","  "," ",
                                               "Contral", "ADOM", "LHy1","LHA", "LFA","SHy1","SHA","SFA","RHy1","RHA","  ","  ",
                                               "Contral", "ADOM", "LHy1","LHA", "LFA","SHy1","SHA","SFA","RHy1","RHA","  ","  ",
                                               "Contral", "ADOM", "LHy1","LHA", "LFA","SHy1","SHA","SFA","RHy1","RHA","  ","  "),
                          hjust=hjust,color=group), 
            fontface="bold", size=3, 
            angle= df2$angle, inherit.aes = F)+
  #手动添加标签
  geom_text(data=df2, aes(x=ID, y=result$value+4, 
                          label=c("", "", "***","", "","","**","","","","","",
                                  "", "", "**","", "","","","***","","","","",
                                  "", "***", "***","***", "**","***","**","***","**","***","","",
                                  "", "***", "","", "","","","**","**","","",""),
                          color=group), 
            fontface="bold", size=4, 
            angle= df2$angle+90, inherit.aes = F)+ #标签
  #手动添加坐标及标题
  geom_text(data=df2,x=11,y=30, label="Biodegradation rate(%)",color="black",size=3.5)+
  geom_text(data=df2, x=-0.2,y=5,label="0",color="black",size=3)+
  geom_text(data=df2, x=-0.2,y=25,label="20",color="black",size=3)+
  geom_text(data=df2, x=-0.2,y=45,label="40",color="black",size=3)+
  geom_text(data=df2, x=-0.2,y=65,label="60",color="black",size=3)+
  geom_text(data=df2, x=-0.2,y=85,label="80",color="black",size=3)+
  geom_text(data=df2, x=-0.2,y=105,label="100",color="black",size=3)+
  #极坐标转换
  coord_polar(direction=1)+
  ##分组标签
  geom_text(data=df3, aes(x = title, y = 140, label=group,color=group), 
            hjust=c(1,1,0,0), angle=c(335,250,135,60), size=5, 
            fontface="bold", inherit.aes = F)+
  #颜色
  scale_color_manual(values = c("#4fbb98","#f46024","#dd6ab0","#7c8ebe"))

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

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

相关文章

联邦学习应用研究现状及发展趋势

本文章主要参考第32届国际人工智能联合会议&#xff08;IJCAI&#xff09;上由清华大学人工智能研究院知识工程研究中心&#xff08;KEG&#xff09;、北京智谱华章科技有限公司、开放群岛开源社区联合编写的《2023联邦学习全球研究与应用趋势报告》&#xff0c;对重点内容进行…

机器学习算法基础--K-means应用实战--图像分割

目录 1.项目内容介绍 2.项目关键代码 3.项目效果展示 1.项目内容介绍 本项目是将一张图片进行k-means分类&#xff0c;根据色彩k进行分类&#xff0c;最后比较和原图的效果。 题目还是比较简单的&#xff0c;我们只要通过k-means聚类&#xff0c;一类就是一种色彩得出聚类之…

一创聚宽的实盘就要关闭了,有没有好用的实盘平台推荐

挺多的&#xff0c;比较普遍的是QMT和Ptrade&#xff0c;python语言&#xff0c;易上手&#xff0c;通用性好&#xff0c;要说适用性可以考虑Ptrade&#xff0c;问一下你的客户经理有没有&#xff0c;用Ptrade的券商也多&#xff0c;如果之前用一创聚宽你可以无缝切换&#xff…

网络安全内网渗透之DNS隧道实验--dnscat2直连模式

目录 一、DNS隧道攻击原理 二、DNS隧道工具 &#xff08;一&#xff09;安装dnscat2服务端 &#xff08;二&#xff09;启动服务器端 &#xff08;三&#xff09;在目标机器上安装客户端 &#xff08;四&#xff09;反弹shell 一、DNS隧道攻击原理 在进行DNS查询时&#x…

python中使用matplotlib绘图

一、背景 当我们在写python程序时&#xff0c;不可避免的需要将数据可视化&#xff0c;也就是绘制出数据的曲线图&#xff0c;以便我们更直观的观察数据间的变化&#xff0c;以及方便对比。此时就要用到matplotlib库了。 matplotlib官方给出的定义是&#xff1a; 翻译过来也就…

SQLAlchemy关联表删除策略设置

目录 SQLAlchemy关联表 常用的级联选项 外键 SQLAlchemy关联表 SQLAlchemy 是一个 Python 的 ORM&#xff08;对象关系映射&#xff09;库&#xff0c;它允许你在 Python 中使用类来表示数据库中的表&#xff0c;从而更方便地进行数据库操作。在 SQLAlchemy 中&#xff0c;可…

ElementUI - 主页面--动态树右侧内容管理

一.左侧动态树 1.定义组件 ①样式&数据处理 <template><el-menu class"el-menu-vertical-demo" background-color"#334157"text-color"#fff" active-text-color"#ffd04b" :collapse"collapsed" router :def…

手撸RPC【gw-rpc】

文章目录 基于 Netty 的简易版 RPC需求分析简易RPC框架的整体实现协议模块 &#x1f4d6;自定义协议 &#x1f195;序列化方式 &#x1f522; 服务工厂 &#x1f3ed;服务调用方 ❓前置知识——动态代理&#x1f573;️Proxy类InvocationHandler 接口 RPC服务代理类内嵌Netty客…

轻松学会 Git(三):掌握 Git 的远程操作

文章目录 前言一、分布式版本控制系统的理解1.1 什么是分布式版本控制系统&#xff1f;1.2 工作原理1.3 分布式版本控制系统的优势 二、初识 Git 远程仓库2.1 远程仓库的概念2.2 Git 远程操作2.3 远程仓库托管服务 三、新建远程仓库四、克隆远程仓库到本地4.1 使用 HTTPS 方式克…

记录一下 malloc 是如何分配内存的

系统深入学习笔记-malloc 以 32 位系统为例&#xff0c;&#xff0c;通过这张图你可以看到&#xff0c;用户空间内存从低到高分别是 6 种不同的内存段&#xff1a; 代码段&#xff0c;包括二进制可执行代码&#xff1b;数据段&#xff0c;包括已初始化的静态常量和全局变量B…

MySQL ——多条件查询(like)

一、基本语法 MySQL LIKE多条件查询语句的基本语法如下&#xff1a; SELECT * FROM table WHERE column1 LIKE %value1% AND column2 LIKE %value2%; 二、说明 在上面的多条件查询语句中&#xff0c;%是通配符&#xff0c;表示任意字符。如果您在LIKE语句中使用%字符&#x…

刚学习编写代码时的愚蠢瞬间:初学者的代码经验分享

刚学习编写代码时的愚蠢瞬间&#xff1a;初学者的代码经验分享 刚学习编写代码时的愚蠢瞬间&#xff1a;初学者的代码经验分享摘要引言糟糕的变量命名&#x1f937;‍♂️ 问题&#x1f605; 解决方案 异常处理的忽略&#x1f648; 问题&#x1f60e; 解决方案 魔法数值的滥用&…

沈阳市浑南区、沈阳国际软件园领导一行莅临中睿天下总部考察指导

近日&#xff0c;沈阳市浑南区委常委、常务副区长傅涵&#xff0c;沈阳国际软件园总经理张永鹏一行会见了中睿天下高级合伙人兼市场负责人周学龙。沈阳高新区管委会经发局局长王博&#xff0c;沈阳高新区管委会投资促进局姜振杰&#xff0c;沈阳国际软件园驻京办主任王军超&…

基础数据标准落标白皮书

1.定义 数据是由特定的环境产生的&#xff0c;这些环境因素包括生产者、时间、系统等&#xff0c;这就造成了同一个语义的数据&#xff0c;会有多种不同的定义方法&#xff0c;这给后期进行数据汇集和整合带来障碍&#xff0c;因此&#xff0c;数据处理的前奏就是数据标准化&a…

公司文件加密防泄密软件有哪些?企业防泄密软件都有哪些功能?

在当今的信息化时代&#xff0c;数据已经成为了企业的重要资产。其中&#xff0c;公司内部的文件、文档、数据库等数据安全至关重要。然而&#xff0c;随着网络攻击手段的不断升级&#xff0c;企业数据泄露事件屡见不鲜&#xff0c;给企业带来了巨大的经济损失和声誉损害。因此…

Rust 围炉札记

文章目录 一、安装 一、安装 Rust in Visual Studio Code Rust 官网 windows系统下Rust环境搭建以及vscode调试环境配置 123

香橙派OrangePi的风扇怎么接

跟树莓派类似&#xff0c;看主板上GPIO口的阵脚定义 树莓派的引脚定义官网&#xff1a;Raspberry Pi Documentation - Raspberry Pi hardware 树莓派的4口和6口可以接一个5V小风扇&#xff0c;4口接正极&#xff0c;6口接负极即可&#xff0c;由于接口相近&#xff0c;可以用于…

爬楼梯Java(斐波那契数列)

题目:有n阶楼梯,一次只能爬一层或者两层,请问有多少种方法? 这类题目其实都可以用斐波那契数列来解决,比如: 一阶楼梯只有一种方法 二阶楼梯有(11,2)两种方法 三阶楼梯有(111,12,21)三种方法 四阶楼梯有(1111,121,112,22,211)五种方式 五阶楼梯有(11111,1112,122,1211,1…

云原生之使用Docker部署RSS阅读器Huntly

云原生之使用Docker部署RSS阅读器Huntly 一、Huntly介绍1.1 Huntly简介1.2 Huntly功能2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、下载Huntly镜像五、部署Huntly5.1 创建挂载目录5.2 创建Hun…

技术干货 | JMeter实现参数化的4种方式

参数化释义 什么是参数化&#xff1f;从字面上去理解的话&#xff0c;就是事先准备好数据&#xff08;广义上来说&#xff0c;可以是具体的数据值&#xff0c;也可以是数据生成规则&#xff09;&#xff0c;而非在脚本中写死&#xff0c;脚本执行时从准备好的数据中取值。 参数…