美文网首页R语言R语言做图ggplot2绘图
R语言|绘制环状的堆叠条形图

R语言|绘制环状的堆叠条形图

作者: 维凡生物 | 来源:发表于2021-05-18 09:45 被阅读0次

堆叠条形图的进阶版,极坐标下的barplot,下面是R绘制堆叠的环状条形图的小例子。

#调用包
library(tidyverse)
library(viridis)

# 模拟数据集
data <- data.frame(
  individual=paste( "Mister ", seq(1,60), sep=""),
  group=c( rep('A', 10), rep('B', 30), rep('C', 14), rep('D', 6)) ,
  value1=sample( seq(10,100), 60, replace=T),
  value2=sample( seq(10,100), 60, replace=T),
  value3=sample( seq(10,100), 60, replace=T)
)

# 把数据转化成统一的格式
data <- data %>% gather(key = "observation", value="value", -c(1,2)) 

# 再每组末尾添加空白距离
empty_bar <- 2
nObsType <- nlevels(as.factor(data$observation))
to_add <- data.frame( matrix(NA, empty_bar*nlevels(data$group)*nObsType, ncol(data)) )
colnames(to_add) <- colnames(data)
to_add$group <- rep(levels(data$group), each=empty_bar*nObsType )
data <- rbind(data, to_add)
data <- data %>% arrange(group, individual)
data$id <- rep( seq(1, nrow(data)/nObsType) , each=nObsType)
#获取每个标签的名称和y轴的位置
label_data <- data %>% group_by(id, individual) %>% summarize(tot=sum(value))
number_of_bar <- nrow(label_data)
angle <- 90 - 360 * (label_data$id-0.5) /number_of_bar     # I substract 0.5 because the letter must have the angle of the center of the bars. Not extreme right(1) or extreme left (0)
label_data$hjust <- ifelse( angle < -90, 1, 0)
label_data$angle <- ifelse(angle < -90, angle+180, angle)

# 为基线准备一个数据帧
base_data <- data %>% 
  group_by(group) %>% 
  summarize(start=min(id), end=max(id) - empty_bar) %>% 
  rowwise() %>% 
  mutate(title=mean(c(start, end)))

# 为grid准备一个数据帧
grid_data <- base_data
grid_data$end <- grid_data$end[ c( nrow(grid_data), 1:nrow(grid_data)-1)] + 1
grid_data$start <- grid_data$start - 1
grid_data <- grid_data[-1,]
# 绘图
p <- ggplot(data) +      
  # 添加堆叠的条形图
  geom_bar(aes(x=as.factor(id), y=value, fill=observation), stat="identity", alpha=0.5) +
  scale_fill_viridis(discrete=TRUE) +
  
  # Add a val=100/75/50/25 lines.
  geom_segment(data=grid_data, aes(x = end, y = 0, xend = start, yend = 0), colour = "grey", alpha=1, size=0.3 , inherit.aes = FALSE ) +
  geom_segment(data=grid_data, aes(x = end, y = 50, xend = start, yend = 50), colour = "grey", alpha=1, size=0.3 , inherit.aes = FALSE ) +
  geom_segment(data=grid_data, aes(x = end, y = 100, xend = start, yend = 100), colour = "grey", alpha=1, size=0.3 , inherit.aes = FALSE ) +
  geom_segment(data=grid_data, aes(x = end, y = 150, xend = start, yend = 150), colour = "grey", alpha=1, size=0.3 , inherit.aes = FALSE ) +
  geom_segment(data=grid_data, aes(x = end, y = 200, xend = start, yend = 200), colour = "grey", alpha=1, size=0.3 , inherit.aes = FALSE ) +
  
  # 添加显示100/75/50/25的文本
  ggplot2::annotate("text", x = rep(max(data$id),5), y = c(0, 50, 100, 150, 200), label = c("0", "50", "100", "150", "200") , color="grey", size=6 , angle=0, fontface="bold", hjust=1) +
  
  ylim(-150,max(label_data$tot, na.rm=T)) +
  theme_minimal() +
  theme(
    legend.position = "none",
    axis.text = element_blank(),
    axis.title = element_blank(),
    panel.grid = element_blank(),
    plot.margin = unit(rep(-1,4), "cm") 
  ) +
  coord_polar() +
  
  # 在每个条形图顶部添加一个标签
  geom_text(data=label_data, aes(x=id, y=tot+10, label=individual, hjust=hjust), color="black", fontface="bold",alpha=0.6, size=5, angle= label_data$angle, inherit.aes = FALSE ) +
  
  # 添加基线信息
  geom_segment(data=base_data, aes(x = start, y = -5, xend = end, yend = -5), colour = "black", alpha=0.8, size=0.6 , inherit.aes = FALSE )  +
  geom_text(data=base_data, aes(x = title, y = -18, label=group), hjust=c(1,1,0,0), colour = "black", alpha=0.8, size=4, fontface="bold", inherit.aes = FALSE)

p
image.png

关注“作图帮”公众号免费分享绘图代码与实验数据~

相关文章

  • R语言|绘制环状的堆叠条形图

    堆叠条形图的进阶版,极坐标下的barplot,下面是R绘制堆叠的环状条形图的小例子。 关注“作图帮”公众号免费分享...

  • R语言可视化(三十六):环状条形图绘制

    36. 环状条形图绘制 清除当前环境中的变量 设置工作目录 加载所需的R包 绘制基础环状条形图 绘制分组环状条形图...

  • 技巧篇06--R语言绘制全网爆火的动态条形图

    技巧篇06--R语言绘制全网爆火的动态条形图 本期教程:师兄教你用R语言绘制动态条形图 数据:2020-1-22至...

  • 可视化:环状条形图

    前言   条形图算是很常见的数据展示图形之一。今天我们就来说说条形图相关的事情——绘制环状条形图。顾名思义,环状条...

  • R语言可视化手册学习笔记

    写在前面 本文基于《R语言可视化手册》来进行练习以及重复其中的代码。 条形图 绘制频数条形图 在绘制条形图的时候如...

  • R语言绘制条形图

    数据 简单条形图 最基本用法:barplot() 水平条形图 数据 堆砌条形图 棘状图 分组条形图 数据 均值条形图

  • 环状柱形图绘制[R语言]

    俗话说“一图胜千言”,一张优美的图形往往比用数字和文字展现的统计分析结果蕴含的价值更高。而环状柱形图相较于普通的柱...

  • 第二章 选择有效的图表

    12个: 简单文本、散点图、表格、折线图、热力图、斜率图、竖直条形图、水平条形图、堆叠竖直条形图、堆叠水平条形图、...

  • ggplot2绘制环状条形图(进阶)

    本节继续介绍通过ggplot2来绘制环状条形图,重点使用annotate函数对数据进行注释 自定义颜色 构建数据 ...

  • R进行三因素方差分析

    欢迎关注R语言数据分析指南 本节来介绍如何使用R做三因素方差分析,绘制并排堆砌条形图并添加显著性字母标记,下面来看...

网友评论

    本文标题:R语言|绘制环状的堆叠条形图

    本文链接:https://www.haomeiwen.com/subject/jpdejltx.html