Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >ggplot2绘制logo版环状条形图

ggplot2绘制logo版环状条形图

作者头像
R语言数据分析指南
发布于 2023-09-11 00:52:16
发布于 2023-09-11 00:52:16
31700
代码可运行
举报
运行总次数:0
代码可运行

❝本节来介绍如何使用「ggplot2结合ggflags」来给环状条形图添加地理图标注释,下面小编通过一个案例来进行展示,图形仅供展示用,希望各位观众老爷能够喜欢。。❞

加载R包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(tidyverse)
# install.packages("countrycode")
library(countrycode)
# devtools::install_github('rensa/ggflags')
library(ggflags)
library(ggtext) 

导入数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wins <- read_csv("data.csv")

数据清洗

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wins_by_cat <- wins %>% 
  group_by(Nationality, Category) %>%  # 按国籍和类别分组
  summarise(cat_total = n()) %>%  # 计算每组的总数
  group_by(Category) %>%  # 再按类别分组
  mutate(rank = rank(-cat_total, ties.method = "min")) %>%  # 对每组进行排名
  arrange(Category, desc(cat_total)) %>%  # 排序
  filter(rank <= 10) %>%  # 只保留前10ungroup() %>%  # 取消分组
  mutate(Nationality = case_when(  # 修改国籍名称
    Nationality == "United Kingdom" ~ "UK",
    Nationality == "United States" ~ "USA",
    Nationality == "Soviet Union" ~ "Russia",
    TRUE ~ Nationality
  )) %>% 
  mutate(code = countrycode(Nationality, "country.name", "iso2c") %>% tolower())  # 转换为国家代码

添加空行用于图形分割

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
empty_nrow = 3
to_add <- data.frame(matrix(NA, nrow = empty_nrow * n_distinct(wins_by_cat$Category), ncol = ncol(wins_by_cat)))
colnames(to_add) <- colnames(wins_by_cat)
to_add$Category <- rep(unique(wins_by_cat$Category), each = empty_nrow)

# 添加空行到数据集
wins_by_cat_space <- wins_by_cat %>% 
  rbind(to_add) %>% 
  arrange(Category, desc(cat_total)) %>% 
  mutate(seq_id = row_number())

计算坐标标签

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
label_data <- wins_by_cat_space
nBar <- nrow(label_data)
angle <- 90 - 360 * (label_data$seq_id - 0.5) / nBar
label_data$hjust <- ifelse(angle < -90, 1, 0)
label_data$angle <- ifelse(angle < -90, angle + 180, angle)

设置颜色

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bg_color <- "#13293d"
line_color <- "#e9f1f2"
font_color <- "white"
bar_pal <- c("Men" = "#679289", "Wheelchair Men" = "#c9cba3",
             "Women" = "#ee2e31", "Wheelchair Women" = "#f4c095")

构建极坐标柱状图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
polar_barplot <- ggplot(wins_by_cat_space) +
  geom_bar(aes(x = seq_id, y = cat_total, fill = Category),
           stat = "identity", position = "dodge",
           show.legend = FALSE, alpha = 0.9, color = line_color, linewidth = 0.5) +
  coord_polar() +
  scale_y_continuous(limits = c(-8, 20)) +
  scale_fill_manual(values = bar_pal, guide = "none") +
  scale_color_manual(values = bar_pal, guide = "none") +
  theme_minimal() +
  labs(x = NULL, y = NULL) +
  theme(panel.background = element_rect(fill = bg_color, colour = bg_color),
        plot.background = element_rect(fill = bg_color, colour = bg_color),
        text = element_text(color = line_color),
        axis.text = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        plot.margin = margin(0, 0, 0, 0))

构建分组条带和标签数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
base_data <- wins_by_cat_space %>% 
  group_by(Category) %>% 
  summarize(start = min(seq_id), end = max(seq_id) - empty_nrow) %>% 
  rowwise() %>%
  mutate(title = mean(c(start, end)),
         printname = case_when(
           Category == "Men" ~ "MEN",
           Category == "Women" ~ "WOMEN",
           Category == "Wheelchair Men" ~ "Wheelchair\nMEN",
           Category == "Wheelchair Women" ~ "Wheelchair\nWOMEN"
         ),
         angle = 360 * (title) / nrow(wins_by_cat_space),
         angle = ifelse(angle < 180, angle - 90, angle + 90))

添加分组标签与条带

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
polar_barplot +
  # 添加数值标签
  geom_text(data = label_data, 
            aes(x = seq_id, y = cat_total - 1.5, label = ifelse(rank <= 3, cat_total, ""), hjust = hjust), 
            color = font_color, fontface = "bold",
            alpha = 1, size = 3, angle = label_data$angle, inherit.aes = FALSE) +
  # 添加国旗
  ggflags::geom_flag(data = label_data, 
                     aes(x = seq_id, y = cat_total + 1.25, country = code), size = 3.5) +
  # 添加国家名称
  geom_text(data = label_data, 
            aes(x = seq_id, y = cat_total + 2.5, label = Nationality, hjust = hjust), 
            color = font_color, fontface = "bold",
            alpha = 0.7, size = 3, angle = label_data$angle, inherit.aes = FALSE) +
  # 添加分组条带
  geom_segment(data = base_data, 
               aes(x = start + 1, y = max(wins_by_cat_space$cat_total, na.rm = TRUE) + 0.5, 
                   xend = end, yend = max(wins_by_cat_space$cat_total, na.rm = TRUE) + 0.5,
                   color = Category), 
               alpha = 0.8, size = 0.6, inherit.aes = FALSE) +
  # 添加分组名称
  geom_text(data = base_data, 
            aes(x = title + 0.5, y = max(wins_by_cat_space$cat_total, na.rm = TRUE) - 1.5, 
                label = printname, angle = angle, colour = Category), 
            hjust = c(1, 0.5, 0.5, 0.5), 
            alpha = 1, size = 3.25, fontface = "bold", inherit.aes = FALSE)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-09-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 R语言数据分析指南 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
R语言ggplot2做漂亮的抖动散点图(geom_jitter)的一个实例
在网上偶然间发现的一个R语言ggplot2做数据可视化的实例,提供数据和代码,今天的推文把代码拆解一下
用户7010445
2021/12/09
9.8K0
R语言ggplot2做漂亮的抖动散点图(geom_jitter)的一个实例
ggplot2优雅绘制环状华夫图
❝本节来介绍如何只使用「geom_segment」函数来绘制环状华夫图,这个名称也许更符合示例图表,「数据代码已经上传VIP群,请自行下载」 ❞ 加载R包 library(tidyverse) library(ggtext) 导入数据 df <- read_tsv("data.xls") %>% mutate(count =as.factor(EDA_count)) labels <- tibble(x = 0,y = 1:5, text = c("A", "B","C","D","E")) 数
R语言数据分析指南
2022/09/23
3000
ggplot2优雅绘制环状华夫图
[会员专享] ggplot2绘制环状正负堆砌条形图
❝「今天VIP群里有观众老爷询问如何绘制环状堆砌条形图」例图如下所示,既然观众老爷们有需求,那小编就来简单写篇文档进行介绍;下面来看具体案例「数据代码已经上传VIP群,请自行下载」 ❞ 例图 图形解读 ❝可以看到就是一张普通的堆砌条形图只不过改为了圆形展示,通过图形我们可以看到数据分为两组,并且每一个样本数值有正负之分,因此与常见的条形图绘制方法无二,只是在于构建极坐标并合理的添加文本;由于小编手里没有合适的数据因此使用R内置数据集来进行展示,下面来看具体细节 ❞ 加载R包 library(tidyv
R语言数据分析指南
2022/09/23
5940
[会员专享] ggplot2绘制环状正负堆砌条形图
ggplot2优雅的自定义轴文本颜色
❝今天来主要介绍如何在不引入外部几何对象的前提下在图形的原有的基础上「自定义修改轴文本颜色」,也许恰好您正好有此特殊需求,希望对各位观众老爷有所帮助;下面来看具体案例; ❞ 加载R包 library(tidyverse) 数据清洗 data1 <- mtcars %>% head(6) %>% mutate_if(is.numeric, function(x) x+10) %>% log10() %>% as.data.frame() %>% rownames_to_column("ty
R语言数据分析指南
2022/09/21
1.4K0
ggplot2优雅的自定义轴文本颜色
高度定制的go和kegg富集分析R语言绘图 | Circular barplot
我前面的甲基化教程主要是针对450k这样的芯片,所以champ流程就绰绰有余,很多小伙伴在咱们公众号后台咨询甲基化测序数据分析,恰好最近实习生投稿:
生信技能树
2022/01/21
5.1K0
高度定制的go和kegg富集分析R语言绘图 | Circular barplot
跟着Nature学作图:R语言ggplot2环形堆积柱形图完整示例
https://www.nature.com/articles/s41586-022-04664-7#Sec33
用户7010445
2023/01/06
2.9K0
跟着Nature学作图:R语言ggplot2环形堆积柱形图完整示例
复现GMM文章(一):图1代码和数据
所有的数据百度网盘链接: https://pan.baidu.com/s/1isKEK1G5I6X90KYqLufmWw
生信学习者
2024/07/17
700
复现GMM文章(一):图1代码和数据
ggplot2绘制多层次网络图
R语言数据分析指南
2024/02/22
2972
ggplot2绘制多层次网络图
ggplot2优雅绘制金子塔图
R语言数据分析指南
2023/08/18
2040
ggplot2优雅绘制金子塔图
医信融合创新沙龙投稿-圆形柱状图(富集圈图)
我们使用df <- df[-which(df$fraction < 0.03),]去掉部分或用AI处理.
叶子Tenney
2023/03/07
6360
医信融合创新沙龙投稿-圆形柱状图(富集圈图)
[R包分享] ggtextcircle绘制环状文本
这个函数的主要目的是生成每个文本标签在圆上的坐标和角度,以便它们可以围绕圆形排列。它使用以下步骤完成
R语言数据分析指南
2024/07/02
1630
[R包分享] ggtextcircle绘制环状文本
ggplot2优雅的绘制箭头表格图
R语言数据分析指南
2023/09/11
4310
ggplot2优雅的绘制箭头表格图
ggplot2优雅绘制环状堆砌条形图
R语言数据分析指南
2023/08/18
5200
ggplot2优雅绘制环状堆砌条形图
R语言数据可视化——仿网易数独圆环条形图
一个案例,告诉你如何灵活的运用ggplot2来制作花样繁多的信息图! 虽然ggplot2的内置图层只有屈指可数的几十个,可是图表组合之后的可能性是无限的。 实际上还是万变不离其宗,就如同使用Excel
数据小磨坊
2018/04/11
1.2K0
R语言数据可视化——仿网易数独圆环条形图
全网最全的R语言基础图形合集
直方图是一种对数据分布情况进行可视化的图形,它是二维统计图表,对应两个坐标分别是统计样本以及该样本对应的某个属性如频率等度量。
生信学习者
2024/06/12
780
全网最全的R语言基础图形合集
R语言ggplot2每周一图活动:第四周~簇状柱形图和堆积柱形图
https://github.com/kaustavSen/tidytuesday/blob/master/2021/week_11.R
用户7010445
2022/05/23
6030
R语言ggplot2每周一图活动:第四周~簇状柱形图和堆积柱形图
ggplot2绘制正负分布条形图
❝本节来介绍如何ggplot2来绘制正负分布的条形图,在之前展示案例的基础上进行了一些小的改动,下面通过1个案例来进行展示 加载R包 library(tidyverse) library(grid) library(ggtext) 导入数据 chocolate <- read_csv('chocolate.csv') mean <- mean(chocolate$rating) 数据清洗 df <- chocolate %>% group_by(company_location) %>%
R语言数据分析指南
2022/09/21
8070
ggplot2绘制正负分布条形图
ggplot2优雅的绘制配对气泡图
Step1. R包和数据加载、主题设置 测试数据在: 链接:https://pan.baidu.com/s/1MuMgMZZCcdO-IGS7_ysfkQ?pwd=1234 提取码:1234 libr
生信菜鸟团
2023/08/23
4830
ggplot2优雅的绘制配对气泡图
ggplot2绘制多图层相关性热图
R语言数据分析指南
2023/10/24
8330
ggplot2绘制多图层相关性热图
ggplot2(r包)绘制基因棒棒糖图
使用geom_segment添加棒棒图的棒子,geom_point添加棒棒图上面的圈圈,geom_text_repel添加对应的文字
生信技能树
2025/02/05
760
ggplot2(r包)绘制基因棒棒糖图
相关推荐
R语言ggplot2做漂亮的抖动散点图(geom_jitter)的一个实例
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文