R语言 多组堆砌图

目录

数据格式

普通绘图

添加比例

R语言 堆砌图_r语言堆砌图-CSDN博客

关键点在于数据转换步骤和数据比例计算步骤,然后个性化调整图。

①data <- melt(dat, id.vars = c("ID"))##根据分组变为长数据

②#计算百分比##

data2 <- ddply(data,

"ID", ##需展示的X轴列名

transform,

percent = value / sum(value) * 100)#相当于按照样本分组,然后计算比例

#只提取需要的行

data2a <- data2[data2$variable=="high",]

data2apercent \<- round(data2apercent,3)

数据格式
复制代码
rm(list = ls())
library(ggplot2)
library(tidyverse)
library(reshape)
library(plyr)
library(patchwork)
dat <- as.data.frame(cbind(1:5, 5:1))
colnames(dat) <- c("high","low")
dat$ID <-  paste0("samp",1:nrow(dat))
复制代码
head(dat)
  high low    ID
1    1   5 samp1
2    2   4 samp2
3    3   3 samp3
4    4   2 samp4
5    5   1 samp5

需要进行数据转换

复制代码
##数据转换##
data  <- melt(dat, id.vars = c("ID"))##根据分组变为长数据

普通绘图
复制代码
p <- ggplot(data = data,
            aes(x=ID,y=value,fill=variable))+
  #geom_bar(stat = "identity",position = "stack")+    ##展示原来数值
  geom_bar(stat = "identity",position = "fill")+      ##按照比例展示:纵坐标为1
  scale_y_continuous(expand = expansion(mult=c(0.01,0.1)),##展示纵坐标百分比数值
                     labels = scales::percent_format())+
  scale_fill_manual(values = c("high"="#98d09d","low"="#e77381"),       ##颜色调整
                    limits=c("high","low"))+                            ##limit调整图例顺序
  theme(panel.background = element_blank(),          ##主题设置
        axis.line = element_line(),                   
        legend.position = "bottom")+
  labs(title = "Title",x=NULL,y="percent")+           ##X,Y轴设置
  guides(fill=guide_legend(title = NULL,nrow = 1,byrow = FALSE))
p
#dev.off()

添加比例

计算百分比

复制代码
#计算百分比##
data2 <- ddply(data, 
            "ID",    ##需展示的X轴列名
            transform,
            percent = value / sum(value) * 100)#相当于按照样本分组,然后计算比例
#只提取需要的行
data2a <- data2[data2$variable=="high",]
data2a$percent <- round(data2a$percent,3)
复制代码
head(data2a)
     ID variable value percent
1 samp1     high     1  16.667
3 samp2     high     2  33.333
5 samp3     high     3  50.000
7 samp4     high     4  66.667
9 samp5     high     5  83.333

绘图

复制代码
p1 <- ggplot(data = data,
            aes(x=ID,y=value,fill=variable))+
  #geom_bar(stat = "identity",position = "stack")+    ##展示原来数值
  geom_bar(stat = "identity",position = "fill")+      ##按照比例展示:纵坐标为1
  scale_y_continuous(expand = expansion(mult=c(0.01,0.1)),##展示纵坐标百分比数值
                     labels = scales::percent_format())+
  scale_fill_manual(values = c("high"="#98d09d","low"="#e77381"),       ##颜色调整
                    limits=c("high","low"))+ ##limit调整图例顺序
  geom_text(data=data2a,
            aes(x=ID,y=1,
                label=paste0(value,"\n",#跨行
                             "(",percent,")")),
            inherit.aes = FALSE,
            vjust=-0.2)+
  theme(panel.background = element_blank(),          ##主题设置
        axis.line = element_line(),                   
        legend.position = "bottom")+
  labs(title = "Title",x=NULL,y="percent")+           ##X,Y轴设置
  guides(fill=guide_legend(title = NULL,nrow = 1,byrow = FALSE))

p1
#dev.off()

合图

复制代码
p2 <-p+ p1
p2

补充:

跟着Nature学作图:R语言ggplot2堆积柱形图完整示例 - 简书 (jianshu.com)

《R数据可视化手册》------3.8 绘制百分比堆积条形图-阿里云开发者社区 (aliyun.com)

相关推荐
dhxhsgrx2 分钟前
PYTHON训练营DAY27
开发语言·python
小山菌2 分钟前
mac中加载C++动态库文件
开发语言·c++·macos
关于不上作者榜就原神启动那件事22 分钟前
Java基础学习
java·开发语言·学习
橙子1991101627 分钟前
在 Kotlin 中,什么是解构,如何使用?
android·开发语言·kotlin
Q_Q196328847543 分钟前
python的家教课程管理系统
开发语言·spring boot·python·django·flask·node.js·php
Black_Cat_yyds1 小时前
设计杂谈-工厂模式
java·开发语言
进击的雷神1 小时前
Perl语言深度考查:从文本处理到正则表达式的全面掌握
开发语言·后端·scala
进击的雷神1 小时前
Perl测试起步:从零到精通的完整指南
开发语言·后端·scala
点云SLAM1 小时前
Python中in和is关键字详解和使用
开发语言·人工智能·python·python学习·in和is关键字·python中for循环
郭尘帅6662 小时前
Vue3中实现轮播图
开发语言·前端·javascript