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. 结果:

相关推荐
善木科研14 小时前
读文献先读图:GO弦图怎么看?
机器学习·数据分析·r语言
Tiger Z15 小时前
R 语言科研绘图第 55 期 --- 网络图-聚类
开发语言·r语言·贴图
十三画者20 小时前
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
python·机器学习·数据挖掘·数据分析·r语言·数据可视化
lishaoan773 天前
实验设计与分析(第6版,Montgomery著,傅珏生译) 第10章拟合回归模型10.9节思考题10.12 R语言解题
回归·r语言·线性回归·残差分析·实验设计与数据分析·回归显著性
南瓜胖胖3 天前
【R语言编程绘图-mlbench】
开发语言·机器学习·r语言
天桥下的卖艺者3 天前
R语言使用随机过采样(Random Oversampling)平衡数据集
开发语言·r语言
gis分享者4 天前
学习threejs,交互式神经网络可视化
神经网络·可视化·threejs·filmpass·effectcomposer·unrealbloompass·outputpass
Biomamba生信基地4 天前
R语言基础| 创建数据集
开发语言·r语言·生信·医药
lishaoan774 天前
实验设计与分析(第6版,Montgomery)第5章析因设计引导5.7节思考题5.19 R语言解题
r语言·方差分析·实验设计与分析·残差分析·正态假设·交互作用
xhload3d5 天前
图扑软件 | 带你体验 Low Poly 卡通三维世界
物联网·3d·智慧城市·html5·webgl·数字孪生·可视化·工业互联网·三维建模·工控·轻量化·中国风·卡通动画·写实风格·科技风·low poly