R语言绘制玫瑰图

前言

本篇是R语言ggplot2包绘制玫瑰图的教程。

编辑:小七

什么是玫瑰图?

玫瑰图其实就是极坐标柱形图。

  • 花瓣的本质:由柱状图在极坐标系下转换而来,每个 “花瓣” 对应一个样本类别(如示例数据中sample1 至 sample7),呈现为从圆心向外延伸的扇形柱体。

  • 花瓣的长度:由对应样本的 Count 值决定,长度越长表示该样本的数量越多,长度越短表示数量越少

  • 上文的玫瑰图通过极坐标转换,将原本的柱状图转化为放射状的 “花瓣” 形态,既保留了类别间的数量对比(长度差异),同时结合填充色和百分比标签,呈现了不同样本的数量特征及占比结构,适合直观展示多类别数据的大小对比。

绘图所需数据

第一列为名称,第二列为数据。

demo数据可以在这里下载https://www.r2omics.cn//res/demodata/rose.txt

R语言绘制玫瑰图

# 来源 https://www.r2omics.cn/
#加载包
library(tidyverse)

#创建数据集
df = read.delim("https://www.r2omics.cn//res/demodata/rose.txt",check.names = F)

dfPlot = df %>%
  mutate(Percent = paste0(round(Count/sum(Count)*100,2),"%") ) # 计算各样本占总数的百分比


# 使用ggplot2创建玫瑰图
ggplot(dfPlot, aes(x = Sample, y = Count, fill = Sample)) +  # 设置x轴为样本类型,y轴为数量,填充颜色按样本类型区分
  geom_bar(width = 1, color = 'black', stat = 'identity') +  # 绘制柱状图,宽度为1,边框为黑色
  coord_polar(theta = 'x') +                                 # 将直角坐标系转换为极坐标系,形成饼图效果
  geom_text(aes(label = Percent),hjust = 1) +                # 添加百分比标签
  ggstyle::scale_fill_sci(palette="rainbow1")+               # 设置颜色,采用ggstyle包中的彩虹色
  theme_bw() +
  theme(
    panel.border = element_blank(), # 移除图表边框
    axis.text.y = element_blank(),  # 移除y轴刻度标签
    axis.ticks.y = element_blank(), # 移除y轴刻度线
    legend.position = 'none'        # 不显示图例
  )