前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ggforce优雅的绘制线圈棒棒糖图

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

作者头像
R语言数据分析指南
发布2023-08-18 13:45:21
1520
发布2023-08-18 13:45:21
举报

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

❝本节来介绍如何使用「ggforce」包来自定义画线圈来绘制棒棒糖图,下面小编就通过一个案例来进行展示数据为随意构建无实际意义仅作图形展示用,希望各位观众老爷能够喜欢。 ❞

加载R包

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

导入数据

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

构建调色板

代码语言:javascript
复制
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)

数据清洗

代码语言:javascript
复制
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 排序

数据可视化

代码语言:javascript
复制
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))  # 设置主题样式
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 欢迎关注R语言数据分析指南
  • 加载R包
  • 导入数据
  • 构建调色板
  • 数据清洗
  • 数据可视化
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档