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

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

相关推荐
繁依Fanyi15 分钟前
用 CodeBuddy 实现「IdeaSpark 每日灵感卡」:一场 UI 与灵感的极简之旅
开发语言·前端·游戏·ui·编辑器·codebuddy首席试玩官
duapple4 小时前
Golang基于反射的ioctl实现
开发语言·后端·golang
Dxy12393102164 小时前
Python 条件语句详解
开发语言·python
还没想好1234 小时前
R包gbmt轨迹模型指标计算的函数
r语言
prinrf('千寻)6 小时前
MyBatis-Plus 的 updateById 方法不更新 null 值属性的问题
java·开发语言·mybatis
m0_555762906 小时前
Qt缓动曲线详解
开发语言·qt
揽你·入怀7 小时前
数据结构:ArrayList简单实现与常见操作实例详解
java·开发语言
AA-代码批发V哥8 小时前
Math工具类全面指南
java·开发语言·数学建模
Nobkins8 小时前
2021ICPC四川省赛个人补题ABDHKLM
开发语言·数据结构·c++·算法·图论
十八年的好汉8 小时前
buck变换器的simulink/matlab仿真和python参数设计
开发语言·matlab