gganimate 中 shadow_mark() 的问题

Issue with shadow_mark() in gganimate

我使用 gganimate 创建了一个 gif,显示 NBA 球员常规赛场均得分,并将其与季后赛场均得分进行比较。除了 shadow_mark() 的图形问题外,我一切正常。 gif从季后赛开始,过渡到常规赛标记,然后再过渡回季后赛标记。

我希望 shadow_mark() 始终以 50% 的不透明度在图表上保留季后赛标记,就像我现在拥有的那样。我不希望常规赛标记留在图表上,但我不知道如何摆脱它。我在 shadow_mark() 中尝试了 past = TRUEfuture = FALSE 等的各种组合,但它似乎并没有解决它。我也试过 exclude_layer = 1 但那会删除两个阴影而不是只删除 1.

这是我现在的动图。下面是用于创建它的代码。

j <- ggplot(nba2, aes(x = PPG, y = Player)) +
  geom_point(shape = 21, stroke = 1, aes(fill = Tm, size = 2)) +
  theme(legend.title = element_blank(), legend.position = 'none') +
  xlab("Points Per Game") +
  labs(caption = 'Data via basketball-reference.com')
plot(j)
anim <- j +
  transition_states(Playoff_or_reg,
                    transition_length = 2,
                    state_length = 2, 
                    wrap = TRUE) +
  shadow_mark(past = TRUE, future = FALSE, alpha = 0.5) +
ggtitle("{closest_state}")
anim

如能提供解决此问题的任何帮助,我们将不胜感激!

您想做的是创建一个新变量,该变量等于每个球员在常规赛中的 PPG。该变量将成为您的静态透明点。原始变量是要转换的变量。

该可视化的代码可能如下所示:

df %>% 
  ggplot(aes(x = Player, y = PPG, color = Tm, fill = Tm)) + 
  geom_point(size = 4.5, shape = 21, alpha = 1, stroke = 1) + 
  geom_point(size = 4.5, shape = 21, alpha = .2,  stroke = 1,  aes(fill = Tm, color = Tm, x = Player, y = newPPG)) +
  coord_flip() + 
  theme(legend.position = 'none') +
  transition_states(
    Playoff_or_reg,
    transition_length = 1,
    state_length = 2) 

希望对您有所帮助