我正在尝试使用看起来像这样的代码通过ggplotly
使用覆盖密度函数对直方图进行动画处理
ggplot() +
geom_point(data_1 = aes(..some aesthetic.., frame = step)) +
geom_hist(data_2 = aes(..some other aesthetic.., frame = step))
该代码不起作用,但是在我看来,一般直方图不适用于ggplotly
。我想知道你们中的任何一个都可以帮忙。
数据
这里是一个例子; frame
是用于定义动画索引的变量
# Some data (points) for the first aes
df_1 = data.frame(x = 1:10, y = 1:10, frame = 1:10)
# Other data (for each frame multiple values from 3 groups)
df_2 = lapply(1:10, function(w)
data.frame(
val = runif(10, min = w, max = w + 1), # Value
code = sample(1:3, 10, replace = TRUE), # Color for fill
frame = w)
)
df_2 = Reduce(rbind, df_2)
积分
ggplots
具有完美的渲染效果,动画ggplotly(pl)
也具有完美的渲染效果。
pl = ggplot() +
geom_point(data = df_1, aes(x, y, frame = frame))
# OK!
print(pl)
plotly::ggplotly(pl)
直方图
ggplots
呈现完美。
gg_pl = ggplot() +
geom_histogram(data = df_2, aes(
val,
fill = factor(code),
frame = frame)) +
scale_fill_brewer()
# OK
print(gg_pl)
但是通过ggplotly
进行的渲染会崩溃
# Error!
plotly::ggplotly(gg_pl)
-data $ group中的错误:一元运算符的参数无效
直方图+点
和以前一样,ggplot
有效,但动画无效。
pl = ggplot() +
geom_point(data = df_1, aes(x, y, frame = frame)) +
geom_histogram(data = df_2,
aes(val, fill = factor(code), frame = frame))
# OK!
print(pl)
# Errors as before
plotly::ggplotly(pl)
答案 0 :(得分:0)
这并不是您要寻找的,但这只是一个开始,也许有帮助。这是使用plot_ly的动画直方图。
library(plotly)
p = df_2 %>%
plot_ly(x=~val,
type='histogram',
color=~code,
frame=~frame,
alpha=0.7)
p
我无法使这些点与直方图进行动画处理,但是上面的点却是相同的。如果取消注释#frame=~frame
线,则这些点将产生动画,但直方图将消失,除了第一帧和最后一帧。
p = plot_ly() %>%
add_histogram(data=df_2,
x=~val,
color=~code,
frame=~frame)%>%
add_trace(data=df_1,
x=~x,
y=~y,
frame=~frame,
type='scatter',
mode='markers')
p %>% animation_opts(easing='linear')