отсутствующие метки yearmon с использованием ggplot scale_x_yearmon

#r #plot

#r #ggplot2 #График #зоопарк

Вопрос:

Я сгруппировал некоторые данные по месяцам и годам, преобразовал в yearmon с помощью zoo и теперь наношу их на график в ggplot. Кто-нибудь знает, почему отсутствует одна из меток, и есть одна для 2018-07, когда нет данных за этот месяц?

Пример данных:

 df <-  data.frame(dates = c("2019-01", "2019-02", "2018-08", "2018-09", "2018-10", "2018-11", "2018-12"), values= c(0,1,2,3,4,5,6))
df$dates <- as.yearmon(df$dates)

ggplot(df, aes(x = dates, y = values))   
  geom_bar(position="dodge", stat="identity")        
  theme_light()  
  xlab('Month')  
  ylab('values')  
  scale_x_yearmon(format="%Y %m")
  

введите описание изображения здесь

Ответ №1:

Я думаю, что scale_x_yearmon это предназначалось для графиков xy по мере их вызова scale_x_continuous , но мы можем просто вызвать scale_x_continuous себя подобным образом (изменяется только строка, отмеченная ##):

 ggplot(df, aes(x = dates, y = values))   
 geom_bar(position="dodge", stat="identity")        
 theme_light()  
 xlab('Month')  
 ylab('values')  
 scale_x_continuous(breaks=as.numeric(df$dates), labels=format(df$dates,"%Y %m")) ##
  

скриншот

Ответ №2:

Я думаю, что это проблема с построением zoo объектов. Используйте стандартный Date класс и укажите метку даты в ggplot. Вам нужно будет добавить день в строку символов для вашего dates столбца. Затем вы можете использовать scale_x_date и указать date_labels .

 library(tidyverse)
df <-  data.frame(dates = c("2019-01", "2019-02", "2018-08", "2018-09", "2018-10", "2018-11", "2018-12"), values= c(0,1,2,3,4,5,6)) %>% 
  arrange(dates) %>% 
  mutate(dates = as.Date(paste0(dates, "-01")))


ggplot(df, aes(x = dates, y = values))   
geom_bar(position="dodge", stat="identity")  
scale_x_date(date_breaks="1 month", date_labels="%Y %m")  
theme_light()  
xlab('Month')  
ylab('values')
  

результирующий график

Комментарии:

1. Это не проблема с отображением объектов зоопарка. В этой проблеме нет объектов zoo.

2. Извините, я имел в виду класс yearmon. Я не знаю, что вызывает проблему, но приведенное выше решение обеспечивает желаемый результат