更改 Plotly Animation 中的 'Frame' 标签

Change the 'Frame' Label in Plotly Animation

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),其中包含每个月的三个字母缩写。此列的 class 是有序因子。

下面的代码显示了我是如何创建 chart/animation:

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

这段代码生成的动画效果很好,看起来像这样:

我想做的是更改滑块上的标签,而不是数字,它显示三个字母的月份缩写。我尝试将框架切换为 ~month_char 这是三个字母月份缩写的有序因子。我最终得到的结果根本不对:

数据框如下所示:

恐怕,跟current implementation of animation sliders in R's plotly API the desired behaviour can't be realized. This is due to the fact, that no custom animation steps are allowed (this includes the labels). Please see (and support) my 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 编辑​​)这是使用上述代码:

生成的图表