Ограничить ось X до текущей недели - PullRequest
0 голосов
/ 09 ноября 2018

Я пытаюсь ограничить ось X графика несколькими цифрами до текущей недели. Поэтому, если мы сейчас на 45-й неделе, все недели с 1 по 45 должны отображаться, а не с 46-го. Я не могу заставить работать любую команду xlim, например xlim(1,45) возвращает ошибку:

Дискретное значение подается в непрерывную шкалу.

Возможно, это связано с тем, что переменная неделя является фактором, но это необходимо для правильного построения графика (без десятичных дробей). Любые решения?

set.seed(1)
dat <- data.frame(object = sample(c("A","B","C","D"),100,replace = TRUE),
                  week = sample(c(1:52),100,replace = TRUE),
                  year = sample(c(2016,2017,2018),100,replace = TRUE),
                  count = sample(c(0:10),100,replace = TRUE))

ggplot(dat, aes(factor(week), count )) + 
  geom_bar(stat="identity" , aes(fill = factor(year)), position = position_dodge2(width = 0.9, preserve = "single")) + 
  facet_wrap(~ object, ncol = 2, scales = "free_y") +
  labs(x = "Week", y = "Count") +
  scale_fill_discrete(name = "Year") 

output for the above data

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Вы можете ограничить сами данные.

Попробуйте использовать следующий код:

data<-dat%>% filter(week < format(Sys.Date(),"%V")) ## filtering based on current week

Plotting :

ggplot(data, aes(factor(week), count )) + 
  geom_bar(stat="identity" , aes(fill = factor(year)), position = position_dodge2(width = 0.9, preserve = "single")) + 
  facet_wrap(~ object, ncol = 2, scales = "free_y") +
  labs(x = "Week", y = "Count") +
  scale_fill_discrete(name = "Year") +theme(axis.text.x = element_text(angle = 45, vjust = 0.4))

output

0 голосов
/ 09 ноября 2018

Почему бы не добавить filter перед сюжетом, чтобы вызвать week:

set.seed(1)
dat <- data.frame(object = sample(c("A","B","C","D"),100,replace = TRUE),
                  week = sample(c(1:52),100,replace = TRUE),
                  year = sample(c(2016,2017,2018),100,replace = TRUE),
                  count = sample(c(0:10),100,replace = TRUE))

dat %>% 
  filter(week <= 45) %>% # add filter before plot
  ggplot(aes(factor(week), count )) + 
  geom_bar(stat="identity" , aes(fill = factor(year)), position = position_dodge2(width = 0.9, preserve = "single")) + 
  facet_wrap(~ object, ncol = 2, scales = "free_y") +
  labs(x = "Week", y = "Count") +
  scale_fill_discrete(name = "Year") 

enter image description here

...