geom_candlestick не отображает должным образом на собственных данных РЕДАКТИРОВАТЬ: преобразовать POSIXct в дату - PullRequest
0 голосов
/ 24 января 2019

У меня есть некоторые ценовые данные, и я пытаюсь построить график geom_candlestick, используя следующее:

Пакеты: tidyquant

    df %>%
     subset(date < "2019-01-24 15:30:00" & date >= "2019-01-24 14:40:00") %>%
  ggplot(aes(x = date, y = close)) +
  geom_candlestick(aes(open = open, high = high, low = low, close = close),
                   color_up = "darkgreen", color_down = "darkred", 
                   fill_up  = "darkgreen", fill_down  = "darkred") +
theme_tq()

Который не строит открытие, максимум, минимум, закрытие как следует.

Однако следующие работы:

AAPL <- tq_get("AAPL", 
               get = "stock.prices", 
               from = "2015-09-01", 
               to = "2016-12-31")

AAPL %>%
  subset(date < "2015-11-04" & date >= "2015-10-01") %>%
  ggplot(aes(x = date, y = close)) +
  geom_candlestick(aes(open = open, high = high, low = low, close = close)) +
  labs(title = "AAPL Candlestick Chart", 
       subtitle = "Zoomed in using coord_x_date",
       y = "Closing Price", x = "") + 
  theme_tq()

Структура обоих фреймов данных одинакова. Где я ошибся?

Данные:

df <- structure(list(date = structure(c(1548342900, 1548342600, 1548342300, 
1548342000, 1548341700, 1548341400, 1548341100, 1548340800, 1548340500, 
1548340200, 1548339900, 1548339600, 1548339300, 1548339000, 1548338700, 
1548338400, 1548338100, 1548337800, 1548337500, 1548337200), class = c("POSIXct", 
"POSIXt"), tzone = ""), low = c(101.95, 102.1, 102.28, 102.29, 
102.31, 102.33, 102.33, 102.34, 102.34, 102.5, 102.59, 102.51, 
102.51, 102.5, 102.6, 102.59, 102.68, 102.67, 102.71, 102.8), 
    high = c(102.11, 102.29, 102.36, 102.34, 102.4, 102.35, 102.43, 
    102.42, 102.51, 102.61, 102.68, 102.59, 102.57, 102.67, 102.7, 
    102.7, 102.69, 102.83, 102.91, 102.95), open = c(102.11, 
    102.29, 102.29, 102.32, 102.34, 102.34, 102.34, 102.34, 102.51, 
    102.61, 102.59, 102.51, 102.57, 102.67, 102.7, 102.67, 102.68, 
    102.83, 102.86, 102.82), close = c(101.96, 102.1, 102.29, 
    102.32, 102.32, 102.34, 102.34, 102.34, 102.34, 102.5, 102.68, 
    102.59, 102.51, 102.5, 102.66, 102.7, 102.69, 102.73, 102.83, 
    102.9), volume = c(68.47, 55.24, 12.54, 128.77, 86.44, 45.84, 
    47.4, 31.97, 61.93, 31.02, 4.85, 33.49, 3.01, 180.48, 43.45, 
    61.53, 17.27, 34.86, 47.1, 14.61)), row.names = c(NA, -20L
), class = c("tbl_df", "tbl", "data.frame"))

1 Ответ

0 голосов
/ 24 января 2019

Пара вещей:

1) В вашем первом кодовом блоке у вас есть две трубы (df %>% %>% subset()). Убедитесь, что убрали это.

2) Если вы проверите свое подмножество, вы увидите, что вы не возвращаете никаких данных - следовательно, почему информация не отображается. Например,

df %>%
  subset(date < "2019-01-24 17:20:00" & date >= "2019-01-24 16:05:00") %>% View()

вернет пустой фрейм данных. В предоставленном вами кадре данных нет отметок времени, которые идут позже, чем 09:15:00, поэтому запрос данных между 16:50 и 17:20 пуст.

Вы можете закомментировать свою строку subset(), и вы действительно получите сюжет.

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