具有变化颜色和文本注释的动画绘图仪表图

Was*_*abi 5 animation r pie-chart plotly r-plotly

我有一个我想要动画的仪表图(按照本教程),图的颜色根据当前值而变化。我还想要一个注释*,它显示仪表的当前值(我不希望在扇区中显示标准值)。

为了记录,我正在尝试使用plotly而不是c3::c3_gauge因为我希望最终将它plotly::subplot()与其他同时动画的情节一起嵌入。

我目前有以下几点:

library(plotly)
library(RColorBrewer)

riskToHex <- function(x) {
  x <- colorRamp(rev(brewer.pal(11, "RdYlBu")))(x / 100)
  rgb <- paste(x[,1], x[,2], x[,3], sep = ",")
  paste0("rgb(", rgb, ")")
}

dd <- data.frame(values = c(90, 60, 20))

dd <- dd %>%
  mutate(colors = riskToHex(dd$values),
         frame = seq.int(nrow(dd)))
dd <- merge(dd, data.frame(values = 200 - dd$values,
                           colors = "white",
                           frame = dd$frame),
            all = TRUE) %>%
  arrange(frame)

plot_ly() %>%
  add_pie(values = dd$values,
          frame = dd$frame,
          rotation = -90,
          marker = list(colors = dd$colors),
          textinfo = "none",
          title = list(text = "Risk score",
                       font = list(size = 20)),
          hoverinfo = "skip",
          sort = FALSE,
          showlegend = FALSE,
          order = "clockwise",
          hole = 0.6) %>%
  add_markers(x = 0,
             y = c(0, 1),
             color = 'rgba(0,0,0,1)') %>%
  add_text(x = 0,
           y = 0.6,
           yshift = 100,
           text = filter(dd, colors != "white")$values,
           frame = distinct(dd, frame)[[1]],
           showlegend = FALSE,
           textfont = list(size = 20)) %>%
  animation_opts(frame = 500) %>%
  layout(
    xaxis = list(showgrid = FALSE,
                 zeroline = FALSE,
                 showticklabels = FALSE
                 ),
    yaxis = list(showgrid = FALSE,
                 zeroline = FALSE,
                 showticklabels = FALSE
    )
  )
Run Code Online (Sandbox Code Playgroud)

这是相当混乱和非常hacky的。我不得不使用,add_text()因为我无法弄清楚如何在这种情况下通过更改每个帧中的值(无论是通过add_annotations还是layout(annotations = ...))来使注释起作用。不幸的是,这add_text()迫使我添加了layout禁用轴(否则会开始出现)的块。而且由于饼图似乎打印在纸面上,我还必须添加两个不可见的点,以便我可以实际定位文本(否则轴将始终保持文本居中)。

无论如何,这成功地生成了一个动画图表。但是,颜色似乎只在下一帧中更改为正确的值(到那时为时已晚)。我不相信这只是处理延迟或其他什么,因为加速动画也会加速颜色变化。

在此处输入图片说明

有趣的是,这只发生在add_text()块上。如果我将其注释掉,则条形图上的颜色可以正常工作。

在此处输入图片说明

对此有什么解释和解决方案吗?


* 我愿意接受其他解决方案!