R语言绘图-3-Circular-barplot图

0. 参考:

https://r-graph-gallery.com/web-circular-barplot-with-R-and-ggplot2.html

1. 说明:

利用 ggplot 绘制 环状的条形图 (circular barplot),并且每个条带按照数值大小进行排列。

2 绘图代码:

注意:绘图代码中的字体为 "Times New Roman",如果没有这个字体的话,可以更换为其他字体,或者用下面代码加载改字体:

r 复制代码
## 加载字体
library(extrafont)
font_import(pattern = "Times New Roman")
loadfonts()
r 复制代码
## 绘图
library(stringr)
library(dplyr)
library(geomtextpath)
library(ggplot2)

## 加载原始数据集
hike_data <- readr::read_rds(url('https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2020/2020-11-24/hike_data.rds')) ## 如果不能加载数据,就通过链接把 hike_data.rds 下载下来,然后再通过 readr::read_rds() 加载数据
#hike_data <- readr::read_rds("/Users/zhiyuanzhang/Downloads/hike_data.rds")
hike_data$region <- as.factor(word(hike_data$location, 1, sep = " -- "))

## 分组统计 region 的数目
plot_df <- hike_data %>%
  group_by(region) %>%
  summarise(n = n())

## 新增一列 location,将其转化为 factor,顺序为region数目生序排列
plot_df$location = factor(plot_df$region, levels = c(levels(reorder(plot_df$region, plot_df$n))))

## 绘图
ggplot(plot_df) +
  ## 绘制横线
  geom_hline(
    aes(yintercept = y), 
    data.frame(y = c(0,1,3.5) * 100), ## 根据 location 数目的最大值设定范围(可理解为 y 的范围)
    color = "lightgrey",
  ) +
  ## 绘制条形图
  geom_col(
    aes(
      x = reorder(location, n),
      y = n,
      fill = location
    ),
    position = "dodge2",
    show.legend = FALSE, ## 不显示图例
    alpha = .9
  ) +
  
  ## 自定义每个条形图的填充色
  scale_fill_manual(
    values=c("red", "orange", "yellow", "green", "cyan", "blue", "purple", "brown", "gray", "pink", "darkgreen"), 
    labels=c(levels(plot_df$location)),
    name="Location") + ## 有图例的话,图例的名称为 Location

  ## 绘制线段
  geom_segment(
    aes(
      x = reorder(location, n),
      y = 0,
      xend = reorder(location, n),
      yend = 350 ## 和上面一样,根据数目进行调整
    ),
    linetype = "dashed",
    color = "gray"
  ) +

  ## 变成环形图
  coord_polar() +
  
  ## 添加文本注释,同时保证文本的方向是和环的方向一致的
  geom_textpath(aes(x = location, y=n, label = n), hjust=0.5, vjust=1, colour = "Black",
                family="Times New Roman", size=5) +
  ## 添加文本注释,代替坐标轴中文本
  geom_textpath(aes(x = location, y=350, label = location), hjust=0.5, vjust=2, colour = "Black",
                family="Times New Roman", size=6) + ## y 指定文本位置
  
  ## 构造一个内环
  scale_y_continuous(
    limits = c(-50, 350),
    expand = c(0, 0)
  ) +
  
  ## 添加标题
  labs(title = "Example of circular barplot") +

  ## 修改主题
  theme(
    ## 设置全部文本的字体
    text = element_text(family = "Times New Roman", face="bold"),
    
    ## 设置标题的字体
    plot.title = element_text(size = 25, hjust = 0.5),
    
    ## 将画布背景设置为白色,并去掉画布的线
    panel.background = element_rect(fill = "white", color = "white"),
    panel.grid = element_blank(),
    panel.grid.major.x = element_blank(),
    
    ## 设置坐标轴
    axis.title = element_blank(),
    axis.ticks = element_blank(),
    axis.text.y = element_blank(),
    
    axis.text.x = element_blank(), ## 将 x 轴文本设为空,用上面 geom_textpath 添加的文本做替换
    
    ## 设置图例(如果有的话,因为上面设置了 show.legend = FALSE,所以不会显示图例)
    legend.title = element_blank(),
    legend.text = element_text(size=12),
    legend.position = "right"
  )

3. 结果:

相关推荐
生信小窝9 小时前
081B 基于R包-Ecospat的生态位重叠分化迁移分析与可视化制图(单物种和多物种版本)【2027】
人工智能·python·r语言
数智工坊1 天前
R-CNN目标检测算法精读全解
网络·人工智能·深度学习·算法·目标检测·r语言·cnn
数智工坊1 天前
Faster R-CNN 全精读:实时目标检测的里程碑之作
网络·人工智能·深度学习·目标检测·r语言·cnn
新缸中之脑2 天前
TurboOCR:优化杰作
开发语言·r语言
花间相见2 天前
【MS-Swift实战】:LoRA原理+核心参数(r/alpha)调参指南(适配Qwen-1.8B医疗场景)
开发语言·r语言·swift
图图玩ai3 天前
SSH 命令管理工具怎么选?从命令收藏到批量执行一次讲清
linux·nginx·docker·ai·程序员·ssh·可视化·gmssh·批量命令执行
叛逆的小小黄3 天前
maxent建模结果中响应曲线的美化
经验分享·笔记·r语言·maxent
sghuter3 天前
AI赋能CI/CD:Gemini实战脚本生成
开发语言·人工智能·ci/cd·青少年编程·r语言
cqbzcsq3 天前
从RNA-seq原始数据开始数据分析(Salmon、tximport基因表达矩阵、DESeq2差异表达、WGCNA共表达网络)
数据挖掘·r语言·生物信息学
赵钰老师6 天前
基于R语言地理加权回归、主成份分析、判别分析等空间异质性数据分析
数据分析·回归·r语言