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()块上。如果我将其注释掉,则条形图上的颜色可以正常工作。
对此有什么解释和解决方案吗?
* 我愿意接受其他解决方案!