#r
#r
Вопрос:
У меня есть следующее
data.frame
date ratio
1992-1 0.5
1992-1 0.6
1992-1 0.5
1992-2 0.7
1992-2 0.65
1992-2 0.65
и я пытаюсь запустить следующий код для создания графика
occratiocomb <- ggplot()
# blue plot
geom_line(data=SKILL_1_OCC_FINAL, aes(x=Date, y=ratio_1occ_comb, group = 1, colour="very low"))
geom_smooth(data=SKILL_1_OCC_FINAL, aes(x=Date, y=ratio_1occ_comb), method = loess, fill="red",
colour="red", size=1) theme(axis.text.x=element_text(angle=60, hjust=1))
# PROBLEM
occratiocomb scale_x_date(date_breaks = "1 year", date_labels = "%Y")
print(occratiocomb)
Ось x (дата) моего графика выглядит ужасно, поскольку у меня есть ежемесячные данные, а также показывает период в 30 лет. То, что я пытаюсь сделать сейчас, это изменить шкалу дат со шкалы, основанной на месяцах, на шкалу, основанную на годах. К сожалению, при попытке запустить код отображается ошибка date_trans работает только с объектами класса Date. На мой взгляд, это странно, потому что мой столбец даты уже находится в формате даты. Или проблема связана с тем, что моя переменная date не содержит дней?
Заранее большое спасибо Xx Freddy
Ответ №1:
Проблема, по-видимому, связана с форматом вашего столбца даты (как вы и подозревали); если вы измените формат, используя, например, lubridate, разрывы будут работать должным образом:
library(tidyverse)
#install.packages("lubridate")
library(lubridate)
SKILL_1_OCC_FINAL <- tibble::tribble(
~date, ~ratio,
"1990-1", "0.5",
"1990-2", "0.6",
"1990-3", "0.5",
"1991-1", "0.7",
"1991-2", "0.65",
"1991-3", "0.65"
)
SKILL_1_OCC_FINAL$date <- lubridate::ym(SKILL_1_OCC_FINAL$date)
occratiocomb <- ggplot(SKILL_1_OCC_FINAL, aes(x = date, y=ratio, group = 1))
geom_line()
geom_smooth(method = "loess", fill = "red", colour = "red")
theme(axis.text.x=element_text(angle = 60, hjust = 1))
scale_x_date(date_minor_breaks = "1 month",
date_breaks = "1 year",
date_labels = "%Y-%m")
print(occratiocomb)
Комментарии:
1. К сожалению, это все еще не работает. Когда я пытаюсь запустить код lubridate, появляется сообщение об ошибке «ym не является экспортированным объектом ‘namespace: lubridate'» . Есть ли у вас какие-либо идеи, в чем может быть проблема?
2. Возможно, это связано с установленной вами версией lubridate — этот код работает с версией 1.7.9.2 — если возможно, отредактируйте свой вопрос, чтобы включить вывод
sessionInfo()
3. Альтернативой является использование пакета зоопарка (
install.packages("zoo")
) и замена строкиSKILL_1_OCC_FINAL$date <- lubridate::ym(SKILL_1_OCC_FINAL$date)
наSKILL_1_OCC_FINAL$date <- zoo::as.Date(zoo::as.yearmon(SKILL_1_OCC_FINAL$date))