Линейный график данных временных рядов с ежемесячными метками на оси X, но ежедневными данными на оси Y - PullRequest
1 голос
/ 27 мая 2019

У меня есть следующие данные:

library(dplyr)
    set.seed(122)
    df <- as_tibble(rlnorm(1260, meanlog = 0.06, sdlog = 0.20))
date <- rep(c("Jan", "Feb", "Mär", "Apr", "Mai", "Jun", 
      "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"), 5)

Предполагается, что это 1260 дневных цен с одним годом = 252 дня и 1 месяц = ​​21 день.

Теперь я хочу нарисовать линейный график с дневными ценами на оси Y и месяцами на оси X.Код ниже адаптирован из этой темы Отображение данных временных рядов, когда столбец даты не существует :

library(tidyverse)

df %>%
    as.data.frame() %>%
    rename(price = 1) %>% 
    mutate(rnames = rownames(.)) %>% 
    ggplot(aes(x = as.numeric(rnames), y = price, 
                group = rep(1:5, times=1, each=252))) +
      geom_line() +
      labs(title = "Stock Price Chart", y = "Price", x = "date") +
      scale_x_continuous(breaks = seq(1, 1260, by = 21), labels = date)

Тем не менее, я немного изменил свой df, вставив новый первыйстрока со значением 1.

df <- rbind(df[0,],c(1),df[1:nrow(df),])

Предполагается, что это начальная цена при t = 0.К сожалению, код не работает сейчас.Есть ли быстрое решение для этого?

1 Ответ

1 голос
/ 27 мая 2019
library(tidyverse)

df %>%
  as.data.frame() %>%
  rename(price = 1) %>% 
  mutate(rnames = rownames(.)) %>% 
  ggplot(aes(x = as.numeric(rnames)-1, y = price, 
             group = c(1,rep(1:5, times=1, each=252)))) +
  geom_line() +
  labs(title = "Stock Price Chart", y = "Price", x = "date") +
  scale_x_continuous(breaks = seq(1, 1260, by = 21), labels = date)

Вы также можете добавить новую точку останова для точки 0. изменяя как scale_x так:

scale_x_continuous(breaks = c(0, seq(1, 1260, by = 21)), labels = c("t=0", date))

Если вы все еще хотите, чтобы точка данных с price == 1 (ваш новый ряд) была помечена как Jan, вам не нужно вычитать 1 из вашего x в эстетике, и ваши перерывы не нужны чтобы манипулировать. Это работает в любом случае.

Самая важная вещь , чтобы мой предыдущий код работал с вашим новым фреймом данных, - это изменение group в эстетике на тот же размер, что и ваш новый фрейм данных.

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