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

news/2024/7/24 7:39:37 标签: r语言, 开发语言

无叠加、显著性的代码:

#设置工作环境
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.niftyadmin.cn/n/5051988.html

相关文章

k8s安装与使用

一、Docker安装 注意docker的版本要和k8s版本对应 https://blog.csdn.net/Myx74270512/article/details/128235051 二、k8s安装 更新yum sudo yum update添加Kubernetes的yum源 sudo vi /etc/yum.repos.d/kubernetes.repo## 添加如下内容 [kubernetes] nameKubernetes bas…

python 多个proto文件import引用时出现ModuleNotFoundError错误

问题描述 my_proto文件夹里有两个proto文件&#xff0c;book.proto想要引用person.proto文件中的Person&#xff0c;如下 book.proto syntax "proto2";import "person.proto"; // 导入person.proto文件message Book {optional string name 1;optional …

开源一个基于的rt-thread系统的烟感采集系统

一、硬件 CPU&#xff1a;stm32f401 NBIOT模块&#xff1a;移远BC26 存储&#xff1a;W25Q128JVSIQTR 扩展&#xff1a;HC595输出&#xff0c;165输入 二、软件应用 FAL&#xff1a;分区 littlefs: 应用存储用的文件系统 EashFlash&#xff1a;日记存储、系统变量存储 kawaii_…

高等数学应试考点速览(下)

函数项级数 【收敛域】上&#xff0c;收敛于&#xff1a;【和函数】&#xff1b; 幂级数&#xff1a;绝对收敛区间 ( − R , R ) (-R,R) (−R,R)&#xff0c;&#xff08;端点是否属于收敛域&#xff0c;需要再探讨&#xff09; R lim ⁡ n → ∞ ∣ a n a n 1 ∣ R\lim_{n…

GoLang 百行代码实现小项目《家庭收支软件》

界面显示 实现思路 GoLang 百行代码实现的小项目《家庭收支软件》是一个简单的家庭收支记账软件&#xff0c;可以通过命令行界面记录和显示收支明细。 在代码中&#xff0c;定义了两个结构体类型&#xff1a;record&#xff08;代表一条收支记录&#xff09;和software&#…

组合数4 高精度计算组合数

一般来说需要高精乘和高精除&#xff0c;但化简为质因子形式后只用高精乘。 一个阶乘n中因子p的个数&#xff1a; #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define endl \nusing namespace std;typedef pair<int, int&…

JDK、JRE 和 JVM 的区别和联系

三者关系 就这三者的关系而言&#xff0c;jvm是jre的子集&#xff0c;jre是jdk的子集&#xff0c;具体关系如下图&#xff1a; Java的执行流程 对于一个Java程序&#xff0c;其执行流程大致如下&#xff1a; 开发人员使用JDK编写和编译Java源代码&#xff0c;生成Java字节码文…

AIGC 绘画Stable Diffusion工具的安装与使用

我们先让ChatGPT来帮我们回答一下,什么是Stable Diffusion Stable Diffusion 是一种基于概率模型的图像生成技术。它通过对图像空间中每个像素的颜色值进行推断,从而生成具有高度真实感和细节的图像。 Stable Diffusion 使用一种称为扩散过程的方法来生成图像。在生成过程中…