R语言ggHoriPlot包绘制地平线图

数据和代码获取:请查看主页个人信息!!!

关键词"地平线图"

1. 数据读取与处理

首先,从TSV文件中读取数据,并进行数据清洗和处理。

复制代码
rm(list=ls())
pacman::p_load(tidyverse,ggalt,ggHoriPlot,hrbrthemes)
​
sports <- read_tsv("activity.tsv")

2. 数据清洗

复制代码
sports <- sports %>%
  group_by(activity) %>% 
  filter(max(p) > 3e-04, 
         !grepl('n\\.e\\.c', activity)) %>% 
  arrange(time) %>%
  mutate(p_peak = p / max(p), 
         p_smooth = (lag(p_peak) + p_peak + lead(p_peak)) / 3,
         p_smooth = coalesce(p_smooth, p_peak)) %>% 
  ungroup() %>%
  do({ 
    rbind(.,
          filter(., time == 0) %>%
            mutate(time = 24*60))
  }) %>%
  mutate(time = ifelse(time < 3 * 60, time + 24 * 60, time)) %>%
  mutate(activity = reorder(activity, p_peak, FUN=which.max)) %>% 
  arrange(activity) %>%
  mutate(activity.f = reorder(as.character(activity), desc(activity)))
​
sports <- mutate(sports, time2 = time/60)

3. 绘制初步图表

根据处理后的数据生成初步图表,展示不同体育活动在一天中的分布情况。

复制代码
ggplot(sports, aes(time2, p_smooth)) +
  geom_horizon(bandwidth=0.1) +
  facet_grid(activity.f~.) +
  scale_x_continuous(expand=c(0,0), breaks=seq(from = 3, to = 27, by = 3), labels = function(x) {sprintf("%02d:00", as.integer(x %% 24))}) +
  viridis::scale_fill_viridis(name = "Activity relative to peak", discrete=TRUE,
                              labels=scales::percent(seq(0, 1, 0.1)+0.1))

4. 美化图表

进一步美化图表,使其更具吸引力和可读性。

复制代码
ggplot(sports, aes(time2, p_smooth)) +
  geom_horizon(bandwidth=0.1) +
  facet_grid(activity.f~.) +
  scale_x_continuous(expand=c(0,0), breaks=seq(from = 3, to = 27, by = 3), labels = function(x) {sprintf("%02d:00", as.integer(x %% 24))}) +
  viridis::scale_fill_viridis(name = "Activity relative to peak", discrete=TRUE,
                              labels=scales::percent(seq(0, 1, 0.1)+0.1)) +
  theme_ipsum_rc(grid="") +
  theme(panel.spacing.y=unit(-0.05, "lines"),
        strip.text.y = element_text(hjust=0, angle=360),
        axis.text.y=element_blank(),
        axis.text.x = element_text(angle = 45, hjust = 1, vjust = 1))
​
ggsave('pic.png', bg = 'white', width = 8, height = 6)

5. 可视化结果

这张图表展示了不同体育活动在一天中的高峰时段。颜色深浅代表了活动强度的相对峰值。通过这张图表,我们可以清晰地看到各项活动在一天中不同时间段的分布情况。

相关推荐
喜欢的名字被抢了2 小时前
Python实战:SQLAlchemy ORM与FastAPI项目集成
开发语言·python·sql·教程·fastapi
从零开始的代码生活_4 小时前
C++ 内存管理:从内存分区到 new/delete 底层原理
开发语言·c++·后端
wabs6664 小时前
关于单调栈【力扣739.每日温度的思考】
java·开发语言
AOwhisky4 小时前
Python 学习笔记(第三期)——流程控制核心知识点自测与详解
开发语言·笔记·python·学习·云原生·运维开发·流程控制
逆向编程5 小时前
Socket异常连接自动清理方案
开发语言
va学弟6 小时前
Java 网络通信编程(10):Channel 和 Selector
java·开发语言
爱吃提升7 小时前
MATLAB impulse函数脉冲响应完整实操教程
开发语言·matlab
小饕7 小时前
从 1080 Ti 到树莓派 4:Qwen2.5-0.5B Function Calling 端侧部署七步实战
开发语言·人工智能
糯米导航7 小时前
Rust + ONNX Runtime 构建生产级 AI 推理服务:从零到压测
开发语言·人工智能·rust
阿pin7 小时前
Java随笔-ConcurrentHashMap
java·开发语言·哈希算法