r - 使用 gganimate 制作伯努利分布的动画,并在 p = 0.5 处意外跳跃
问题描述
我正在练习使用gganimate
并想创建类似于这个闪亮应用程序但动画的东西。我取得了一些成功,但遇到了一个非常奇怪的错误,我真的无法解释,希望有人能帮助我。这篇文章的其余部分包含一个完全可重现的示例。
这是我到目前为止所拥有的:
bernoulli <- cbind.data.frame(c(rep(1,101), rep(0,101)), c(seq(1,0,by=-0.01), seq(0,1,by=0.01)), c(seq(1,0,by=-0.01), seq(1,0,by=-0.01)))
names(bernoulli) <- c("success", "probability", "p")
bernoulli <- bernoulli[order(bernoulli$p),]
row.names(bernoulli) <- c(1:nrow(bernoulli))
这将创建我正在使用的数据框。这是三个变量,非常简单。我的动画的逻辑是二分结果的概率如何随伯努利分布的p参数而变化。举一个静态图的例子,如果我这样做:
ggplot(subset(bernoulli, p == 0.70), aes(x=success, y=probability)) +
geom_bar(stat="identity")
并改变p
我的子集,我得到了想要的结果(尽管由于某种原因,有某些数字,看似完全随机,我无法对数据进行子集,即使我可以在数据框中清楚地看到它们。我已经检查了变量是数字等等,所以这不是问题。这是一个附带问题,我不知道它为什么会发生)。
例如,在 p == 0.12 和 p == 0.70 之间切换,并将它们与前面提到的 Shiny 应用程序进行比较,您会看到它匹配,当然轴会有所不同。
当我尝试按如下方式实现动画时:
ggplot(bernoulli, aes(x=success, y=probability)) +
geom_bar(stat="identity") +
transition_time(p)
一切看起来都很棒!轴匹配得很好,动画流畅......但是一旦条达到 p == 0.50,它们都跳到 1,这根本没有反映在数据中。这只是我的计算机/R/ggplot/gganimate 的问题吗?
解决方案
推荐阅读
- angular - Angular unit test failing due to query() call in animation
- assembly - 如何使用 __asm 在 C 中执行 DCD?
- ios - 错误:试图将堆栈放在不可读的内存中:0x7ffeeafe2af0:使用 userDefaults
- python - 如何将急切执行中的模型转换为静态图并保存在 .pb 文件中?
- css - CSS3 animation is not working on safari browser
- java - 如何使用 Selenium 处理年份和月份的下拉菜单?
- c# - ASP.NET Core 中的自定义路由
- django - Django making table from Pandas Pivot Table
- json - Uploading JSON to firebase from dataframe
- postgresql - 即使我在 pg_hba.conf 中从信任切换到 md5,Postgresql 用户也可以在没有密码或密码错误的情况下在同一台机器上登录