Ploly Прогноз временных рядов в R - изменить стандартную ось X и диапазон Y - PullRequest
0 голосов
/ 01 июля 2018

У меня есть запрос по прогнозированию временных рядов с использованием графика. Я построил прогнозную диаграмму, однако мало что нужно изменить, но она не работает для меня. Пожалуйста, найдите вложение для деталей и любезно дайте мне знать исправление или предложение для кода R.

Запрос:

  1. в настоящее время X Axis показывает 2,016,5, 2017, 2017,5 и т. Д., Однако я хочу, чтобы он показывал yearmonth , как 2016.04,2014,05 и т. Д. Пожалуйста, обратите внимание yearmonth - это поле данных, пожалуйста, обратитесь к приложенным данным

  2. В настоящее время на оси Y отображаются метки с разницей в 50 K, однако я хочу, чтобы она отображалась как 5 K, 10K, 15K и т. Д.

Ниже используется код R:

library(forecast)
library(plotly)
ord <- order(ds$`Calendar Year-DISPLAY_KEY`,ds$`Calendar Month-DISPLAY_KEY`)
sds <- ds[ord,]
firstRec <- sds[1,]
mn <- as.numeric(firstRec$'Calendar Month-DISPLAY_KEY')    
yr <- as.numeric(as.character(firstRec$'Calendar Year-DISPLAY_KEY'))
tm <- ts(data = sds$Calc_Best_DSO , start= c(yr,mn) ,frequency = 12)
plot(tm)
tm[is.na(tm)] <-0

fit <- ets(tm)
fore <- forecast(fit, h = 3, level = c(80, 95))

plot_ly() %>%
  add_lines(x = time(tm), y = tm,hoverinfo = "text",
            color = I("black"), name = "observed",text= paste("Month: ",sds$`Calendar Month-DISPLAY_KEY`,
                    "<br>","Year: ",sds$`Calendar Year-DISPLAY_KEY`,
                   "<br>","DSO: ",sds$Calc_Best_DSO)) %>%
  add_ribbons(x = time(fore$mean), ymin = fore$lower[, 2], ymax = fore$upper[, 2],
              color = I("gray95"), name = "95% confidence") %>%
  add_ribbons(x = time(fore$mean), ymin = fore$lower[, 1], ymax = fore$upper[, 1],
              color = I("gray80"), name = "80% confidence") %>%
  add_lines(x = time(fore$mean), y = fore$mean, color = I("blue"), name = "prediction")

Ниже приведены примеры данных:

Month,Year,YearMonth,Population
1,2017,201701,100
1,2018,201801,300
2,2018,201802,310
3,2018,201803,320
4,2018,201804,330
2,2017,201702,200
3,2017,201703,300
4,2017,201704,400
5,2017,201705,500
6,2017,201706,600
7,2017,201707,700
8,2017,201708,800
9,2017,201709,900
10,2017,201710,1000
11,2017,201711,1100
12,2017,201712,1200

data

Chart

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Вы хотите отформатировать даты как R date с. Это помогло бы с форматированием.

library(plotly)
x <- read.table(
  text = 'Month,Year,YearMonth,Population
1,2017,201701,100
  1,2018,201801,300
  2,2018,201802,310
  3,2018,201803,320
  4,2018,201804,330
  2,2017,201702,200
  3,2017,201703,300
  4,2017,201704,400
  5,2017,201705,500
  6,2017,201706,600
  7,2017,201707,700
  8,2017,201708,800
  9,2017,201709,900
  10,2017,201710,1000
  11,2017,201711,1100
  12,2017,201712,1200', 
  header = TRUE, sep = ','
)
x$YearMonth <- as.Date(paste0(x$YearMonth, '01'), format = '%Y%m%d') # Formatting as dates
x$Population <- x$Population * 100 # Scaling population to show large numbers
x <- x[with(x, order(YearMonth)), ] # Sorting by date
p <- plot_ly(
  data = x, x = ~YearMonth, y = ~Population, type = 'scatter', mode = 'lines'
) %>% layout(
  xaxis = list(tickformat = '%Y.%m'), # This formatting option should help with your desired format
  yaxis = list(tick0 = min(x$Population), dtick = 5000, tickformat = '.2s') # Be sure to include min for tick0
)
p

Это приводит к следующему графику - enter image description here

0 голосов
/ 02 июля 2018

Лучший способ настроить ось на графике - это установить переменную с необходимыми параметрами.

Для оси x это будет выглядеть так, как показано ниже.

    a <- list(
       autotick = FALSE,
       tick0 = 0,
       dtick = 1)

Это будет показывать только отметки на оси х каждый интервал 1. Я понимаю, что это было не то, что вы спрашивали. Использование dtick = .01 затруднит чтение по оси x.

Для оси y это будет похоже на приведенный ниже код.

   b <- list(
      autotick = FALSE,
      tick0 = 0,
      dtick = 5000) #for 5k intervals

Теперь вы должны просто ввести их в свой кодовый сюжет. Вот пример.

    plot_ly()%>%
      add_lines(x = time(tm) y = tm, hoverinfo = text, color = I("black"), name = "Observed") %>%
      layout(xaxis = a, yaxis = b)

Это должно работать. Все, что вам нужно сделать, это определить a и b, а затем просто добавить макет к вашему текущему графическому коду.

Надеюсь, это было полезно.

...