Начальная точка gglplot2 по оси x в течение 52 недель - PullRequest
2 голосов
/ 10 января 2020

Я хотел бы создать сюжет, похожий на приведенный ниже. По сути, хотелось бы, чтобы ось X начиналась с недели 35 go до недели 52, а затем отображала неделю 0-34. На самом деле не удалось найти решение. По-видимому, ось x всегда по умолчанию установлена ​​на неделе 0. Я полагаю, что я мог бы использовать week as.factor и вручную установить порядок, но это кажется большой работой. Там должно быть более простое решение. Надеюсь, что вы можете помочь.

2019 canada influenza

Пример набора данных. Я не настроил его для нормального распространения .... вероятно, должен был.

set.seed(99)
fludata <-data.frame('year'= '2019', 'week'= seq(1,52,by =1), 'cases' = sample(0:17, 52, replace=T))

ggplot(fludata,aes(x=week, y = cases)) + geom_line()

Ответы [ 2 ]

6 голосов
/ 10 января 2020

Вот то, о чем я думал. Вы можете преобразовать year и week в yearweek с помощью tsibble. Вы можете использовать scale_x_date, чтобы определить, где вы хотите date_breaks, и включить информацию, которую вы хотите, в метки (например, %U только для недели или %Y-%U для года-недели). Если вы пропустите год, вы можете добавить годы в виде отдельного текста.

library(tsibble)
library(ggplot2)

set.seed(99)

fludata <-data.frame(
  year = c(rep(2019, 18), rep(2020, 34)), 
  week = c(35:52, 1:34),
  cases = sample(0:17, 52, replace=T)
)

fludata$yr_wk <- yearweek(paste(fludata$year, 'week', fludata$week))

fludata %>% 
  ggplot(aes(yr_wk, cases)) + 
  geom_line() + 
  scale_x_date(date_breaks="2 weeks", date_labels = "%U") 

plot with weeks ordered

0 голосов
/ 10 января 2020

Преобразование года и недели в объект времени помогает:

library(tsibble)
set.seed(99)
fludata <-data.frame('year'= c(rep('2020', 34), rep('2019', 52-34)),
                               'week'= seq(1,52,by =1), 'cases' = sample(0:17, 52, replace=T)) %>% 
  mutate(ym=yearweek(paste(year, 'week', week)))

ggplot(fludata,aes(x=ym, y = cases)) + geom_line()

Вы также можете попробовать добавить scale_x_date(labels=scales::label_date_short()). enter image description here

...