前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ggplot2绘制多边形热图

ggplot2绘制多边形热图

作者头像
R语言数据分析指南
发布2023-12-20 15:27:30
1360
发布2023-12-20 15:27:30
举报

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

❝本节通过一个案例来介绍如何绘制多边形热图,整个过程仅参考。希望对各位观众老爷能有所帮助。「数据代码已经整合上传到2023VIP交流群」,加群的观众老爷可自行下载,有需要的朋友可关注文末介绍加入VIP交流群。 给予长期支持我们的忠实读者们一个特别待遇:凡是购买过小编2022年或2023年VIP会员文档的朋友们,将自动获得2024年及以后更新的绘图文档代码,无需额外付费。目前这两年的会员文档已累记卖出1500+,质量方面各位无需担忧。简要概括就是只要购买任意1年的会员内容,2024及后期公众号所更新的绘图文档均会在已经加入的会员群内分享。 ❞

加载R包

代码语言:javascript
复制
library(tidyverse)
library(camcorder)
library(RColorBrewer)

导入数据

代码语言:javascript
复制
scurvy <- read_csv('scurvy.csv')
pal <- RColorBrewer::brewer.pal(name = "Paired", n = 4)

定义函数

代码语言:javascript
复制
# 格式处理
clean_format <- function(column) {
  column %>%
    str_to_sentence() %>%
    str_remove("_d6") %>% 
    str_replace_all("_", " ")
}

数据清洗

代码语言:javascript
复制
scurvy_long <- scurvy %>%
  # 将指定列中的字符串解析为数字
  mutate(across(gum_rot_d6:fit_for_duty_d6, parse_number)) %>%
  # 将数据从宽格式转换为长格式
  pivot_longer(gum_rot_d6:fit_for_duty_d6, names_to = "symptom", values_to = "severity") %>%
  # 对处理和症状名称进行清洁和格式化
  mutate(
    treatment = clean_format(treatment) %>% fct_rev(),
    symptom = clean_format(symptom) %>% fct_inorder(),
    # 根据症状和严重程度设置颜色
    symptom_col = if_else(symptom == "Fit for duty", if_else(severity == 0, "grey35", "grey85"), pal[severity + 1]),
    treat_case = 2 - study_id %% 2) %>%     # 计算治疗案例
  rowwise() %>%   # 对每一行应用以下变换
  mutate(
    # 根据治疗案例计算 x 坐标
    x = case_when(
      treat_case == 1 ~ list(c(as.numeric(symptom), as.numeric(symptom) + 1, as.numeric(symptom))),
      treat_case == 2 ~ list(c(as.numeric(symptom), as.numeric(symptom) + 1, as.numeric(symptom) + 1))),
    # 根据治疗案例计算 y 坐标
    y = case_when(
      treat_case == 1 ~ list(c(as.numeric(treatment) + 1, as.numeric(treatment) + 1, as.numeric(treatment))),
      treat_case == 2 ~ list(c(as.numeric(treatment), as.numeric(treatment) + 1, as.numeric(treatment))))) %>% 
  ungroup() %>%    # 取消行级分组
  mutate(i = row_number())  # 为每一行添加一个行号

创建背景网格数据

代码语言:javascript
复制
rct <- expand.grid(x = 1:5 + 0.5, y = 1:6 + 0.5)

数据可视化

代码语言:javascript
复制
ggplot(scurvy_long %>% unnest(c(x, y))) +
  # 绘制多边形,填充颜色和边框颜色根据症状颜色设置
  geom_polygon(aes(x = x, y = y, fill = symptom_col, color = symptom_col, group = i)) +
  geom_text(aes(x = as.numeric(symptom) + 0.5, y = 0.5, label = str_wrap(symptom, 10)), stat = "unique") +
  geom_text(aes(x = 0.8, y = as.numeric(treatment) + 0.5, label = str_wrap(treatment, 10)), stat = "unique", hjust = 1) +
  # 添加背景网格
  geom_tile(data = rct, aes(x, y), fill = NA, color = "grey99", linewidth = 0.3) +
  scale_x_continuous(limits = c(0.3, 6)) +   # 设置 x 轴的范围
  scale_fill_identity() +   # 设置填充颜色和边框颜色
  scale_color_identity() +
  theme_void() +
  theme(
    plot.background = element_rect(fill = "grey99", color = NA),
    plot.margin = margin(10, 10, 10, 10))
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-12-19,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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