#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. Я не знаю, что вызывает проблему, но приведенное выше решение обеспечивает желаемый результат