Как показать только годы по оси X с помощью ggplot - PullRequest
1 голос
/ 04 октября 2019

Я хочу, чтобы на моей многолинейной диаграмме были показаны только годы (а не годы и месяцы) на оси х. Я пытался отформатировать "годы" с "%Y", но df2 показывает дни, месяцы и год.

library(tidyverse)
theme_set(theme_minimal())

df <- tibble(
             year = as.character(c(2015, 2016)),
             v1 = c(3,10),
             v2 = c(7,18))

    df$year <- as.Date(df$year, "%Y")
    format(df$year, "%Y")
    #> [1] "2015" "2016"

    df2 <- df %>%
      gather(key = "variable", value = "value", -year)

    ggplot(df2, aes(x = year, y = value)) + 
      geom_line(aes(color = variable, linetype = variable)) + 
      scale_color_manual(values = c("darkred", "steelblue"))

1 Ответ

2 голосов
/ 04 октября 2019

С пакетом lubridate.

Вы можете использовать scale_x_date, поскольку ваша дата октябрь в 2015 и 2016 годах, поэтому я сместил даты на 9 месяцев, чтобы отобразить и 2015, и 2016 год на графике.

library(lubridate)
df2 <- df %>%
    gather(key = "variable", value = "value", -year) %>%
    mutate(year = year - months(9))

ggplot(df2, aes(x = year, y = value)) + 
    geom_line(aes(color = variable, linetype = variable)) + 
    scale_color_manual(values = c("darkred", "steelblue")) + 
    scale_x_date(date_breaks = "1 year",date_labels = "%Y")

Другим способом будет извлечение года из столбца даты в виде целого числа и использование year (целое число) для построения графика. Также необходимо указать разрывы.

df2 <- df %>%
    gather(key = "variable", value = "value", -year) %>%
    mutate(year = lubridate::year(year))

ggplot(df2, aes(x = year, y = value)) + 
    geom_line(aes(color = variable, linetype = variable)) + 
    scale_color_manual(values = c("darkred", "steelblue")) +
    scale_x_continuous(breaks = c(2015,2016))

Оба результатана том же графике.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...