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. 可视化结果

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

相关推荐
cch89184 小时前
汇编与Java:底层与高层的编程对决
java·开发语言·汇编
荒川之神5 小时前
拉链表概念与基本设计
java·开发语言·数据库
chushiyunen5 小时前
python中的@Property和@Setter
java·开发语言·python
小樱花的樱花6 小时前
C++ new和delete用法详解
linux·开发语言·c++
froginwe116 小时前
C 运算符
开发语言
fengfuyao9856 小时前
低数据极限下模型预测控制的非线性动力学的稀疏识别 MATLAB实现
开发语言·matlab
摇滚侠6 小时前
搭建前端开发环境 安装 nodejs 设置淘宝镜像 最简化最标准版本 不使用 NVM NVM 高版本无法安装低版本 nodejs
java·开发语言·node.js
t198751287 小时前
MATLAB十字路口车辆通行情况模拟系统
开发语言·matlab
yyk的萌7 小时前
AI 应用开发工程师基础学习计划
开发语言·python·学习·ai·lua
Amumu121388 小时前
Js:正则表达式(一)
开发语言·javascript·正则表达式