【发布时间】:2018-08-21 04:52:02
【问题描述】:
我正在尝试使用 R 的 gganimate 包来创建一堆直方图的动画,其中动画的每一帧都显示图像的直方图。我有 ~400 张图片,所以 ~400 列。我的数据如下所示:
| bins.left | bins.right | hist1 | hist 2 | ... | hist n |
如您所见,我需要将每一列视为直方图的 Y 值,在每一帧中。换句话说,我的动画应该遍历列。
但我在互联网上研究的所有示例似乎都只考虑一列作为框架的标识符。比如this example:
mapping <- aes(x = gdpPercap, y = lifeExp,
size = pop, color = continent,
frame = year)
p <- ggplot(gapminder, mapping = mapping) +
geom_point() +
scale_x_log10()
属性'Year'被认为是迭代器。该数据如下所示:
country continent year lifeExp pop gdpPercap
<fctr> <fctr> <int> <dbl> <int> <dbl>
1 Afghanistan Asia 1952 28.801 8425333 779.4453
2 Afghanistan Asia 1957 30.332 9240934 820.8530
3 Afghanistan Asia 1962 31.997 10267083 853.1007
4 Afghanistan Asia 1967 34.020 11537966 836.1971
5 Afghanistan Asia 1972 36.088 13079460 739.9811
6 Afghanistan Asia 1977 38.438 14880372 786.1134
我不想修改我的数据以适应这种模式的原因是,如果我将所有直方图保存在一列中,我的数据框将非常长(长度 = ~ 16000 * 400)并且很难处理。此外,以如此混乱的方式保存我的数据并不直观。我相信我的问题必须有一个简单的解决方案。任何建议都非常感谢。
【问题讨论】:
-
你说你有大约 400 张图片。您的意思是要转换为直方图的 400 个数据帧吗?请使用
dput发布您的数据的实际样本(例如,将dput(my_data[1:10, ])的输出粘贴到您的问题中。 -
R 中的大多数工具都假定您的数据是 long 而不是 wide,因此数据通常更容易工作长格式。无论哪种方式,您的单元格总数都相同,所以我不确定我是否理解您对重塑数据的担忧。
-
@Marius,这种形式的数据不容易查看,避免一些潜在的错误。将时间序列分别放在单独的列中似乎很自然。我不想仅仅因为我不知道如何让它在 gganimate 中工作而重塑我的数据。但如果不可能,那我就得重新塑造它。
标签: r animation ggplot2 visualization gganimate