首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >ggforce优雅的绘制线圈棒棒糖图

ggforce优雅的绘制线圈棒棒糖图

作者头像
R语言数据分析指南
发布2023-07-11 13:29:34
发布2023-07-11 13:29:34
4540
举报

欢迎关注R语言数据分析指南

本节来介绍如何使用ggforce包来自定义画线圈来绘制棒棒糖图,下面小编就通过一个案例来进行展示数据为随意构建无实际意义仅作图形展示用,希望各位观众老爷能够喜欢。数据+代码已经上传2023VIP群,加群的观众老爷请自行下载

关注下方公众号下回更新不迷路

加载R包

代码语言:text
复制
library(tidyverse)
library(janitor)
library(ggtext)
library(ggforce)
library(ggfx)
library(colorspace)

导入数据

代码语言:txt
复制
yarn <- read_csv("data.csv")

构建调色板

代码语言:text
复制
pal <- tribble(~r, ~g, ~b,198, 114, 67,
  220, 166, 146,180, 185, 163,129, 160, 149,30, 166, 179) %>% 
  mutate(pal = rgb(r, g, b, maxColorValue = 255)) %>% 
  pull(pal)

pal <- colorRampPalette(pal)(8)

数据清洗

代码语言:text
复制
df_base <- yarn %>% 
  group_by(yarn_company_name) %>%  # 按 yarn_company_name 分组
  summarise(rating = mean(rating_average, na.rm = TRUE),n = n()) %>%  # 计算平均评分和数量
  arrange(desc(n)) %>%  # 按数量降序排列
  head(8) %>%  # 选择前 8 条数据
  ungroup() %>%  # 取消分组
  mutate(p = n/sum(n),x0 = 1:n())  # 计算百分比和 x 坐标

df_yarn <- map_dfr(1:nrow(df_base), ~{
  tibble(
    x = 3*df_base$p[.x]*sin(seq(0, 2*pi, length = 200)) + df_base$x0[.x],  # 计算 x 坐标
    y = 3*df_base$p[.x]*cos(seq(0, 2*pi, length = 200)) + df_base$rating[.x] - 3*df_base$p[.x],  # 计算 y 坐标
    id = runif(200),yarn_company_name = df_base$yarn_company_name[.x]  # 生成随机 id 和 yarn_company_name
    )}) %>% 
  mutate(y = -y) %>%  # 反转 y 坐标
  arrange(yarn_company_name, id)  # 按 yarn_company_name 和 id 排序

数据可视化

代码语言:text
复制
df_yarn %>% 
  ggplot(aes(x, y)) +
  geom_rect(aes(xmin=0.5,xmax=8.5,ymin=-1.2,ymax = -1),fill = lighten("#d4a373", 0.2)) +  # 绘制矩形背景
  with_blur(geom_segment(aes(x = x0, xend = x0, y = -1, yend = -rating+0.2,
                             colour = yarn_company_name), df_base, size = 0.6),sigma = 3) +  # 绘制模糊线段
  with_blur(geom_bspline0(aes(colour = yarn_company_name),size=0.6),sigma=3) +  # 绘制模糊曲线
  geom_text(aes(x0, -rating-0.2, label = paste0(yarn_company_name, "\n\n\n",round(rating, 1), "|", n)),
            df_base,size =4, colour = "black", lineheight = 0.3) +  # 绘制文本标签
  coord_cartesian(clip = "off") +  # 设置坐标系
  scale_colour_manual(values = pal,breaks = df_base$yarn_company_name) +  # 设置颜色
  scale_x_continuous(breaks = 1:8,labels = df_base$yarn_company_name) +  # 设置 x 轴刻度
  ylim(-5, -1) +  # 设置 y 轴范围
  theme_void() +  # 设置空白主题
  theme(
    text = element_text(size =4, colour = "grey20"),
    legend.position = "none",
    plot.background = element_rect(fill ="white", colour = "grey20"),
    plot.margin = margin(t=20,b=0,l=20,r=20))  # 设置主题样式

本节介绍到此结束;有需要学习R语言个性化数据可视化的朋友,欢迎到小编的淘宝店铺 R语言数据分析指南购买2023年度会员文档同步更新中售价149元,内容主要包括各种高分论文的图表分析复现以及一些个性化图表的绘制均包含数据+代码;按照往年数据小编年产出约在150+以上

购买后微信发小编订单截图即邀请进新的会员交流群,小编的文档为按年售卖,只包含当年度的除系列课程外的文档,有需要往年文档的朋友也可下单购买,需要了解更多信息的朋友欢迎交流咨询。

2023会员群案例展示

本文系转载,前往查看

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

本文系转载前往查看

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 欢迎关注R语言数据分析指南
  • 关注下方公众号下回更新不迷路
    • 加载R包
    • 导入数据
    • 构建调色板
    • 数据清洗
    • 数据可视化
    • 2023会员群案例展示
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档