我正在创建一个堆叠条形图的动画(调用geom_col
)。我有100列。当我生成动画时,我在应该填充的列中得到了很多白色。
请参见下面的gif:
这个gif基于大约100 k行的数据,所以我不能在这里全部发布。特别是,我不能在一个更简单的例子中重现这个:
library('tidyverse')
library('gganimate')
data.frame(time = rep(1:50, 200)) %>%
arrange(time) %>%
mutate(type = rep(c(rep('A', 100), rep('B', 100)), 50),
class = rep((1:100), 100),
value = runif(10000, 0, 1)) %>%
ggplot(aes(x = class, y = value, fill = type)) +
geom_col() +
transition_time(time)
工作正常(忽略上面数据中的结构,但我没有白色):
我试着添加ease_aes()
,enter_fade()
,exit_fade()
,但是都不起作用。有人对是什么导致了这个问题有想法吗?
---更新---
根据这些评论,我试着过滤数据,看看到底发生了什么。减少到只有两个国家和5年的数据,问题似乎是数据块在百分位之间移动。当我想要的是他们只是在每个百分位内增长和收缩。你可以在下面的gif中看到它:
产生这种情况的数据如下:
structure(list(country = c("US", "DE", "US", "US", "US", "DE",
"US", "DE", "US", "DE", "US", "DE", "US", "DE", "DE", "US", "DE",
"DE", "DE", "US", "DE", "US", "US", "US", "DE", "US", "DE", "US",
"US", "DE", "DE", "US", "DE", "US", "DE", "DE", "US", "DE", "US",
"DE", "US", "US", "DE", "US", "US", "DE", "US", "DE", "US", "DE",
"US", "DE", "DE", "US", "DE", "DE", "US", "US", "DE", "US", "US",
"DE", "US", "US", "DE", "US", "DE", "US", "DE", "US", "DE", "US",
"DE", "US", "DE", "DE", "US", "DE", "US", "US", "US", "DE", "US",
"DE", "US", "US", "DE", "US", "DE", "US", "DE", "US", "DE", "US",
"DE", "US", "US", "DE", "US", "US", "DE", "US", "US", "DE", "US",
"DE", "US", "DE", "US", "DE"), glob.perc = c(0, 1, 1, 2, 3, 3,
4, 4, 5, 5, 6, 6, 7, 7, 7, 8, 8, 9, 9, 0, 1, 1, 2, 3, 3, 4, 4,
5, 6, 6, 6, 7, 7, 8, 8, 8, 9, 9, 0, 1, 1, 2, 2, 3, 4, 4, 5, 5,
6, 6, 7, 7, 7, 8, 8, 9, 9, 0, 1, 1, 2, 2, 3, 4, 4, 5, 5, 6, 6,
7, 7, 8, 8, 9, 9, 9, 0, 1, 1, 2, 3, 3, 4, 4, 5, 6, 6, 7, 7, 8,
8, 9, 9, 0, 1, 1, 2, 2, 3, 4, 4, 5, 6, 6, 7, 7, 8, 8, 9, 9),
avg.income.country = c(437288.3, 95483.3754884956, 140784.030084749,
140733.5, 92860.7570361667, 27041.1685330627, 82474.4007614941,
22845.1776491941, 75584.1480877374, 20954.7760014288, 70400.3370710519,
19852.2326809271, 54038.6152996391, 15598.3057384556, 15170.9872445152,
62785.1002246113, 18201.6743099168, 39606.7790727414, 39051.1193095399,
450574.9, 89747.1381942579, 143040.424101143, 144413.3, 95281.4131057479,
26564.8030858664, 84645.1806598295, 22453.3134663253, 99495.4,
58448.7245539485, 16815.8081430027, 15925.4607078112, 67342.4870614877,
18775.7716260376, 52078.6261482834, 14908.4732454128, 14586.6597398625,
60740.8587598986, 17551.4029073371, 449672.7, 85860.9513060095,
138573.062299181, 107999.713224424, 26551.7207203881, 118606.7,
81673.5478130351, 22256.5124499113, 74664.7815210055, 20289.8692320157,
69424.4509484861, 19130.6427260963, 53441.6796042233, 15011.8413898757,
14554.8379632521, 62031.6543795656, 17372.7239256402, 17038.0153770701,
59253.6721580242, 478696.8, 87965.3040019279, 141489.41469306,
110750.734809188, 28139.4736007857, 121395.4, 84564.2106500617,
23136.9326230234, 77452.4071740221, 20809.5254887263, 72187.8010950261,
19423.2184457137, 67965.6133547784, 18489.4603327709, 64700.6833849069,
17811.5804850837, 50612.3590346861, 14165.4003733601, 13829.472811758,
542123.2, 89948.9091254987, 158338.248242006, 156908.9, 104475.681782063,
29031.666816329, 92305.5514014955, 23750.4970524401, 107775.8,
78090.1791649968, 21282.8059573008, 73283.2631907787, 19808.7465702618,
69304.0213872794, 18813.7418777938, 65958.7178466761, 18090.1791160505,
559720.3, 92129.3365959901, 159846.146463587, 123870.105638014,
30030.7222753586, 135301.9, 94785.176213572, 24358.2621716462,
110644.4, 80286.8697338142, 21690.4391200441, 75280.156096728,
20090.0002975319, 71136.641950609, 19006.2143886443, 67594.6662796918,
18216.0069568407), region = c("Americas", "Europe", "Americas",
"Americas", "Americas", "Europe", "Americas", "Europe", "Americas",
"Europe", "Americas", "Europe", "Americas", "Europe", "Europe",
"Americas", "Europe", "Europe", "Europe", "Americas", "Europe",
"Americas", "Americas", "Americas", "Europe", "Americas",
"Europe", "Americas", "Americas", "Europe", "Europe", "Americas",
"Europe", "Americas", "Europe", "Europe", "Americas", "Europe",
"Americas", "Europe", "Americas", "Americas", "Europe", "Americas",
"Americas", "Europe", "Americas", "Europe", "Americas", "Europe",
"Americas", "Europe", "Europe", "Americas", "Europe", "Europe",
"Americas", "Americas", "Europe", "Americas", "Americas",
"Europe", "Americas", "Americas", "Europe", "Americas", "Europe",
"Americas", "Europe", "Americas", "Europe", "Americas", "Europe",
"Americas", "Europe", "Europe", "Americas", "Europe", "Americas",
"Americas", "Americas", "Europe", "Americas", "Europe", "Americas",
"Americas", "Europe", "Americas", "Europe", "Americas", "Europe",
"Americas", "Europe", "Americas", "Europe", "Americas", "Americas",
"Europe", "Americas", "Americas", "Europe", "Americas", "Americas",
"Europe", "Americas", "Europe", "Americas", "Europe", "Americas",
"Europe"), year = c(1980L, 1980L, 1980L, 1980L, 1980L, 1980L,
1980L, 1980L, 1980L, 1980L, 1980L, 1980L, 1980L, 1980L, 1980L,
1980L, 1980L, 1980L, 1980L, 1981L, 1981L, 1981L, 1981L, 1981L,
1981L, 1981L, 1981L, 1981L, 1981L, 1981L, 1981L, 1981L, 1981L,
1981L, 1981L, 1981L, 1981L, 1981L, 1982L, 1982L, 1982L, 1982L,
1982L, 1982L, 1982L, 1982L, 1982L, 1982L, 1982L, 1982L, 1982L,
1982L, 1982L, 1982L, 1982L, 1982L, 1982L, 1983L, 1983L, 1983L,
1983L, 1983L, 1983L, 1983L, 1983L, 1983L, 1983L, 1983L, 1983L,
1983L, 1983L, 1983L, 1983L, 1983L, 1983L, 1983L, 1984L, 1984L,
1984L, 1984L, 1984L, 1984L, 1984L, 1984L, 1984L, 1984L, 1984L,
1984L, 1984L, 1984L, 1984L, 1984L, 1984L, 1985L, 1985L, 1985L,
1985L, 1985L, 1985L, 1985L, 1985L, 1985L, 1985L, 1985L, 1985L,
1985L, 1985L, 1985L, 1985L, 1985L)), row.names = c(NA, -110L
), class = c("tbl_df", "tbl", "data.frame"))
动画的程式码如下:
df %>%
ggplot(aes(x = glob.perc, y = avg.income.country/1000, fill = region)) +
geom_col(position = 'stack') +
theme_minimal() +
labs(subtitle = "Year: {frame_time}",
x = element_blank(),
y = element_blank(),
fill = 'Region') +
transition_time(year)
我的感觉是,这不是一个丢失数据的问题--每年的可视化都是完整的,没有空白。我认为这是一个geom_col()
如何过渡的问题。
2条答案
按热度按时间1dkrff031#
gganimate在处理您的数据集时遇到了问题,因为一些year/country/glob.perc值有多个观察值,而一些值为零。它(错误地)假设您正在跟踪的一些值每年都在glob.perc类别之间移动。解决这个问题的一个方法是使每个year/country/glob.perc组合都有且只有一个值。在这里,我将www.example.comavg.income.country放在可能有更聪明的方法来实现这一点,也许可以基于邻近的值或回归模型来插补值。
下面是原始数据中的观测值数量。注意,有些是双倍的,有些是缺失的。这给gganimate带来了歧义,因为不清楚你追踪的单位是否已经消失(它已经消失了),或者它是否已经移动到另一个glob.perc类别(gganimate假设的)。
将这些数据绘制成线条,我们可以看到底层数据中有一些可疑的地方。您可以再看一下那里,看看您的glob.perc代码是否按您希望的方式工作。如果类别的含义与它们听起来的一样,我会假设线条不会交叉。
abithluo2#
您所显示的是每个时间步的单一状态。但是
value
从一个步骤到另一个步骤没有太大的变化,这导致了 Flink 。我相信您想看到的是如下所示的内容。为此,我对数据
group_by
进行了分组,并添加了一列sum
作为累积值数据。filter
用于限制渲染时间。