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)

相关推荐
.浓茶几秒前
c++11
开发语言·c++
宇卿.4 分钟前
Java中的while和do...while循环
java·开发语言
等什么君!7 分钟前
JavaScript数据类型
开发语言·前端·javascript
爱敲代码的小杨.13 分钟前
【Python】2. 变量和数据类型
开发语言·python
kuai-24 分钟前
MacOS配置python环境
开发语言·python·macos
lly20240627 分钟前
CSS 尺寸 (Dimension)
开发语言
procoder33828 分钟前
[C/C++开发]链接动态库在不同操作系统上的行为
c语言·开发语言·c++
大道归简33 分钟前
2.点位管理开发(续)及设计思路——帝可得后台管理系统
java·开发语言·spring boot·spring·前端框架
L-李俊漩36 分钟前
python配置环境变量
开发语言·python·pip
_.Switch1 小时前
Python深度学习:从神经网络到循环神经网络
开发语言·人工智能·python·rnn·深度学习·神经网络·机器学习