六边形图与动画

时间:2018-07-03 23:17:26

标签: r plot ggplot2 plotly

我想为一个具有年度滑动比例的十六进制图构建动画,这样它就可以渲染每年的新十六进制图。

当前,我正在使用ggplot2plotly for the animation,可以为geom_point创建此文件,但是geom_hex不支持plotly },图形中不会显示任何内容。

library(plotly)
library(ggplot2)
library(gapminder)

p1 <- ggplot(gapminder) +
geom_point(aes(y = lifeExp, x = gdpPercap, frame = year))

ggplotly(p1)

p2 <- ggplot(gapminder) +
geom_hex(aes(y = lifeExp, x = gdpPercap, frame = year))

ggplotly(p2)

我追求的结果将与facet_wrap(~year)产生的图形等效,但带有动画。

ggplot(gapminder) +
geom_hex(aes(y = lifeExp, x = gdpPercap)) + facet_grid(~year)

我也看过gganimate,但安装困难,因此更喜欢plotly的滑动刻度尺。谷歌搜索试图寻找如何为十六进制图制作动画的尝试是徒劳的。我可以使用R中的任何其他绘图或动画程序包来实现此目的,还是可以破解ggplotplotly来完成我想要的方式?

有关如何执行此操作的代码将不胜感激。

1 个答案:

答案 0 :(得分:1)

ggplotly的代码显示调度是通过last_plot()值的类的hte类进行的:

ggplotly
 #---------
function (p = ggplot2::last_plot(), width = NULL, height = NULL, 
    tooltip = "all", dynamicTicks = FALSE, layerData = 1, originalData = TRUE, 
    source = "A", ...) 
{
    UseMethod("ggplotly", p)
}
<bytecode: 0x7feba7ef5ff0>
<environment: namespace:plotly>

因此,您怀疑没有使用与plotly类相关的GeomHex, Geom, gg术语的“痕迹”。但是,有一种方法与类GeomPath的值相关联,因此您可以使用geon_density2d用该数据为2d密度设置动画。动画过程中它有点纠结,但数据的整体模式在我看来似乎很明显:

library(plotly)
library(ggplot2)
library(gapminder)

p2 <- ggplot(gapminder) +
geom_density2d(aes(y = lifeExp, x = gdpPercap, frame=year))

ggplotly(p2)

ggplot发出有关未使用帧的警告,但是必须将frame参数保留在aes(.)调用中,以向ggploty发信号表示需要动画。

还使bin2d动画化间隔热图类型显示:

p3 <- ggplot(gapminder) +
geom_bin2d(aes(y = lifeExp, x = gdpPercap, frame=year))

ggplotly(p3)