Измените метку «Рамка» в анимации Plotly - PullRequest
4 голосов
/ 11 апреля 2020

TLDR: я хочу пометить ползунок кадра трехбуквенным сокращением вместо номера для каждого месяца.

Я создал гистограмму, показывающую среднюю глубину снега каждый месяц в течение 40-летний период. Я извлекаю свои данные из NOAA, а затем группирую по годам и месяцам, используя lubridate. Вот код:

  snow_depth <- govy_data$snwd %>%
     replace_na(list(snwd = 0)) %>%
     mutate(month_char = month(date, label = TRUE, abbr = TRUE)) %>%
     group_by(year = year(date), month = month(date), month_char) %>%
     summarise(avg_depth = mean(snwd))

Функция mutate создает столбец (month_char) во фрейме данных, содержащий трехбуквенное сокращение для каждого месяца. Класс для этого столбца является упорядоченным фактором.

Приведенный ниже код показывает, как я создаю диаграмму / анимацию:

snow_plot <- snow_depth %>% plot_ly(
    x = ~year, 
    y = ~avg_depth, 
    color = ~avg_temp, 
    frame = ~month,
    text = ~paste('<i>Month</i>: ', month_char,
                  '<br><b>Avg. Depth</b>: ', avg_depth, 
                  '<br><b>Avg. Temp</b>: ', avg_temp),
    hoverinfo = 'text',
    type = 'bar'
  )

snow_plot

Этот код создает график, который хорошо анимируется и выглядит следующим образом:

snow chart

Я хотел бы изменить метки на ползунке, чтобы вместо цифр отображалось трехбуквенное сокращение месяца. Я попытался переключить фрейм на ~ month_char, который является упорядоченным фактором трехбуквенных сокращений месяца. То, что я получаю, совсем не правильно:

snow chart, bad

Фрейм данных выглядит так:

snow-depth-df

1 Ответ

2 голосов
/ 14 апреля 2020

Боюсь, что с текущей реализацией слайдеров анимации в графически API R желаемое поведение не может быть реализовано. Это связано с тем, что никакие пользовательские шаги анимации не разрешены (включая метки). Пожалуйста, смотрите (и поддерживайте) мой GitHub FR для получения дополнительной информации.

Это лучшее, что я в настоящее время смог придумать:

library(plotly)

DF <- data.frame(
  year = rep(seq(1980L, 2020L), each = 12), 
  month = rep(1:12, 41), 
  month_char = rep(factor(month.abb), 41),
  avg_depth = runif(492)
)

fig <- DF %>%
  plot_ly(
    x = ~year, 
    y = ~avg_depth,
    frame = ~paste0(sprintf("%02d", month), " - ", month_char),
    type = 'bar'
  ) %>%
  animation_slider(
    currentvalue = list(prefix = "Month: ")
  )

fig

(Правка из OP) Вот результирующий график с использованием приведенного выше кода :

Snow Plot With Month Labels

...