Установка пределов даты внутри geom_boxplot в ggplot2 - PullRequest
0 голосов
/ 17 сентября 2018

У меня один вопрос о том, как работает geom_boxplot. Сначала я использую данные типа даты и стараюсь не отображать все свои данные, только часть.

Сначала я загружаю свои пакеты

library(dplyr)
library(ggplot2)
library(tibble)
library(quantmod)

Я использую getSymbols для получения моих данных

yahoo <- getSymbols(auto.assign = F,Symbols = "QQQ")
chartSeries(yahoo,subset = "last 3 month")

Я формирую свои данные, чтобы использовать их в ggplot

df <- yahoo %>%
  as.data.frame() %>% 
  rownames_to_column() %>% 
  rename("time" = "rowname") %>% 
  mutate(time = as.Date(time))

Я установил лимиты дат

l <- c(df$time[10],df$time[100])

Тогда я пытаюсь построить это

ggplot(data = df) +
  geom_boxplot(aes(x = time,
                   lower  = QQQ.Close,
                   upper  = QQQ.Open,
                   ymin   = QQQ.Low,
                   ymax   = QQQ.High,
                   middle = QQQ.Open),
               stat = "identity") +
  scale_x_date(limits = l)

и я получаю ошибку:

Error in if (df$xmin[i] >= df$xmax[i - 1]) { : 
  valor ausente donde TRUE/FALSE es necesario

Я пытаюсь по-другому:

ggplot(data = df) +
  geom_boxplot(aes(x = time,
                   lower  = QQQ.Close,
                   upper  = QQQ.Open,
                   ymin   = QQQ.Low,
                   ymax   = QQQ.High,
                   middle = QQQ.Open),
               stat = "identity") +
  coord_cartesian(xlim = l)

Второй способ работает, но у меня вопрос: почему первый график дает мне ошибку? Если я попробую с другим geom, я могу использовать параметр scale_x_date limits. например:

ggplot(data = df) +
  geom_line(aes(x = time,
                y = QQQ.Adjusted)) +
  scale_x_date(limits = l)

Почему это не работает с первым сюжетом?

...