R语言 多组堆砌图

目录

数据格式

普通绘图

添加比例

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

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

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

②#计算百分比##

data2 <- ddply(data,

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

transform,

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

#只提取需要的行

data2a <- data2data2$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)

相关推荐
神明不懂浪漫4 分钟前
【第七章】Java中的常用类
java·开发语言·前端·经验分享·笔记
程序喵大人8 小时前
【C++进阶】STL容器与迭代器 - 01 STL 容器先解决元素放在哪里
开发语言·c++·stl
cui_ruicheng9 小时前
Python从入门到实战(十六):多进程编程
开发语言·python
wdfk_prog10 小时前
嵌入式面试真题第 15 题:不可恢复异常后的通用崩溃快照、调用栈保存与离线分析架构
linux·开发语言·面试·架构
晴空了无痕10 小时前
从 Go 基础到 K8s:一条可落地的 Go 服务端成长路线
开发语言·后端·golang·kubernetes
神明不懂浪漫10 小时前
【第五章】Java中的继承与多态
java·开发语言
神州世通11 小时前
解密企业通信安全防线:Avaya Aura 三层安全架构深度解析
开发语言·php
AC赳赳老秦12 小时前
企业工商公开信息采集分析:OpenClaw 批量查询企业工商信息,生成企业画像报告
大数据·开发语言·python·自动化·php·deepseek·openclaw
qq_25183645712 小时前
基于java Web 动漫视频网站毕业论文
java·开发语言·前端
野生风长12 小时前
C++入门基础:从命名空间到引用与指针的全面解析
开发语言·c++