Je souhaite représenter des patterns de direction en fonction de plusieurs années
Mon jeu de donnée ressemble à ça
Code : Tout sélectionner
direction<-c(rep(90,50),rep(100,75),rep(120,200),rep(150,80),rep(270,50),rep(290,75),rep(300,200),rep(320,80))
année<-c(rep("2015",50),rep("2015",75),rep("2015",200),rep("2015",80),rep("2016",50),rep("2016",75),rep("2016",200),rep("2016",80))
df<-as.data.frame(cbind(direction,année))
range<-c("0-45","45-90","90-135","135-180","180-225","225-270","270-315","315-360")
Je souhaite utiliser le code de ce lien pour produire le même type d'Horizon map
https://yonicd.github.io/ggalt/articles/horizon.html
Code : Tout sélectionner
library(hrbrthemes)
library(ggalt)
library(readr)
library(dplyr)
#PREPARATION DATA
sports <- read_tsv("https://github.com/halhen/viz-pub/raw/master/sports-time-of-day/activity.tsv")
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
sports <- mutate(sports, time2 = time/60)
#GRAPHIQUE
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)) +
labs(x=NULL, y=NULL, title="Peak time of day for sports and leisure",
subtitle="Number of participants throughout the day compared to peak popularity.\nNote the morning-and-evening everyday workouts, the midday hobbies,\nand the evenings/late nights out.") +
theme_ipsum_rc(grid="") +
theme(panel.spacing.y=unit(-0.05, "lines")) +
theme(strip.text.y = element_text(hjust=0, angle=360)) +
theme(axis.text.y=element_blank())
Par rapport au graph du lien et du script je souhaiterai avoir les ranges de direction en X à la place des horaires et mes dates en Y à la place des sports.
N'étant pas familier avec cette grammaire et ayant un jeu de donnée différent, je n'arrive pas à transformer mes données et à générer les variables nécessaires à la réalisation de ce graph
Merci d'avance pour votre aide
Anthony