前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ggplot2绘制logo版环状条形图

ggplot2绘制logo版环状条形图

作者头像
R语言数据分析指南
发布于 2023-09-11 00:52:16
发布于 2023-09-11 00:52:16
34600
代码可运行
举报
运行总次数: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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
[Matlab]绘图颜色[通俗易懂]
修改或规定Matlab中几何图形的颜色,对颜色可以有四种描述方法,分别是:颜色名称、短名称、RGB三元组、十六进制颜色代码。
全栈程序员站长
2022/09/04
2K0
[Matlab]绘图颜色[通俗易懂]
matlab画点图如何设置点的大小颜色_matlab如何根据点绘制曲线图
Matlab中,plot绘图的曲线线宽、标记点大小、标记点边框颜色和填充颜色的设置
全栈程序员站长
2022/11/05
8.8K0
matlab画图操作(修改坐标轴及字体,加粗,颜色修改,适合论文画图)「建议收藏」
在我们使用imagesc()函数对矩阵进行绘制图像的时候,经常会出现y轴刻度并不是我们所需要的顺序,例如我们需要从下向上依次递增,而我们绘制的图片却是从上 向下递增,不符合我们需求,于是有如下解决方案。
全栈程序员站长
2022/11/08
15.4K0
matlab画图操作(修改坐标轴及字体,加粗,颜色修改,适合论文画图)「建议收藏」
MATLAB绘图怎么变得更好看[通俗易懂]
同样用的都是MATLAB,为啥大佬们画的图都那么好看,而你画的图都是简单、普通,那是因为我们掌握的基础元素不一样,只有掌握了最基本的基础元素,再加上日益增长的审美,才会有一张好图出来。
全栈程序员站长
2022/08/31
1.2K0
Matlab画图常用的线条符号、颜色
4 、若要同时改变颜色及图线型态(Line style),也是在坐标对后面加上相关字串即可
全栈程序员站长
2022/07/01
2.8K0
matlab二维彩图colormap调色_matlab如何自定义颜色
这个博客是自己的第一篇博客,瞎写实验中。。。 (2020年2月第一次更新,调整了一下格式,增加了常用的颜色图形式)
全栈程序员站长
2022/11/07
5.6K1
matlab二维彩图colormap调色_matlab如何自定义颜色
Matlab画图线型、符号及颜色设置
-Solid line (default) – Dashed line : Dotted line -. Dash-dot line
全栈程序员站长
2022/09/03
3.3K0
Matlab画图线型、符号及颜色设置
MATLAB绘图总结
二维图像是在不同的平面坐标上将数据点连接起来的平面图像。常用的平面坐标有,直角坐标、极坐标、对数坐标等,MATLAB有很多常用的指令来绘制不同的二维图像。
全栈程序员站长
2022/09/07
1.7K0
matlab中plotyy设置曲线颜色,matlab plotyy 颜色「建议收藏」
MATLAB 画双纵坐标 plotyy 的用法 对数坐标 MATLAB 画双纵坐标具有两个纵坐标标度的图形 在 MATLAB 中,如果需要绘制出具有不同纵坐标标度的两个图形,可以使用 ……
全栈程序员站长
2022/07/05
1.7K0
【MATLAB 从零到进阶】day6 MATLAB绘图与可视化
图形窗口、线条、曲面和注释等都被看作是MATLAB中的图形对象,所有这些图形对象都可以通过一个被称为“句柄值”的东西加以控制,例如可以通过一个线条的句柄值来修改线条的颜色、宽度和线型等属性。这里所谓的“句柄值”其实就是一个数值,每个图形对象都对应一个唯一的句柄值,它就像一个指针,与图形对象一一对应。例如可以通过命令h = figure返回一个图形窗口的句柄值。
统计学家
2019/04/10
7840
【MATLAB 从零到进阶】day6 MATLAB绘图与可视化
matlab plotyy 坐标轴设置,[转载]Matlab plotyy画双纵坐标图实例[通俗易懂]
legend([H1,H2],{‘y1 = 200*exp(-0.05*x).*sin(x)’;’y2 =
全栈程序员站长
2022/06/28
1.2K0
Matlab画图 线条的颜色、宽度等相关设置
线条的属性有:Color —— 颜色、LineWidth —— 线条宽度、LineStyle —— 线型、LineJoin —— 线条边角的样式、 AlignVertexCenters —— 锐化垂直线和水平线
全栈程序员站长
2022/09/03
14.3K0
Matlab画图 线条的颜色、宽度等相关设置
matlab内建函数怎么不同颜色,matlab分段函数不同颜色绘图
functionfunc_baidu_56568133x=-200:200;y=(x0).*(x.^2+(1-x).^(1/4)-5);figure(1);plot(x,y)fh=@func_baid
全栈程序员站长
2022/07/05
7280
matlab 画折线图并美化
ytick 和 xtick 设置x和y轴刻度线位置; 可以单独使用 xtick([1,4,7])
全栈程序员站长
2022/09/06
7500
MATLAB画图——基础篇「建议收藏」
在MATLAB使用的过程中,学会画图是一项必要的技能。在这里,我总结了部分简单的画图函数,同时附上代码(本文中的程序为了方便给出的数据都很简单,大家可以自己去尝试其他数据)。这对刚刚开始接触MATLAB的小白来说,我认为还是很有帮助的。
全栈程序员站长
2022/11/08
2.2K0
MATLAB画图——基础篇「建议收藏」
MATLAB绘制统计折线图
  在论文或者文章写作中,经常需要使用图形来表示我们的实验结果。一般来说,这种表示方式比表格更加直观、更加可视化。因此,本文给出一种使用MATLAB处理数据得到折线图的教程。
全栈程序员站长
2022/06/29
8830
MATLAB绘制统计折线图
matlab画图标签,Matlab绘图
以下示例将演示该概念。下面绘制x的值范围是从0到100,使用简单函数y = x,增量值为5。
全栈程序员站长
2022/09/12
2.4K0
matlab画图标签,Matlab绘图
数学建模之MATLAB画图汇总
1.plot()函数 plot函数用于绘制二维平面上的线性坐标曲线图,要提供一组x坐标和对应的y坐标,可以绘制分别以x和y为横、纵坐标的二维曲线。 例:
全栈程序员站长
2022/07/21
3K0
数学建模之MATLAB画图汇总
MATLAB自带的dwt2和wavedec2函数实现基于小波变换的自适应阈值图像边缘检测
小波函数有:haar小波函数、Daubechies小波函数、Biorthogo小波函数等,可以根据实际情况调用
全栈程序员站长
2022/09/15
1.9K0
MATLAB自带的dwt2和wavedec2函数实现基于小波变换的自适应阈值图像边缘检测
MATLAB plotyy总结「建议收藏」
当需要画出2个两个不同纵坐标的图时,此时的横坐标的图是相同的,在MATLAB中这个函数叫plotyy 下面列举的是一个简单的画plotyy的应用 几种不同的调用格式
全栈程序员站长
2022/07/04
5K0
MATLAB plotyy总结「建议收藏」
推荐阅读
相关推荐
[Matlab]绘图颜色[通俗易懂]
更多 >
目录
  • ❝本节来介绍如何使用「ggplot2结合ggflags」来给环状条形图添加地理图标注释,下面小编通过一个案例来进行展示,图形仅供展示用,希望各位观众老爷能够喜欢。。❞
  • 加载R包
  • 导入数据
  • 数据清洗
  • 添加空行用于图形分割
  • 计算坐标标签
  • 设置颜色
  • 构建极坐标柱状图
  • 构建分组条带和标签数据
  • 添加分组标签与条带
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档