gganimate中的shadow_mark()问题

时间:2019-07-13 21:44:19

标签: r ggplot2 gganimate

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

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

这是我的gif图片。下面是用于创建它的代码。

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

任何有关如何解决此问题的帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

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

以下是该Viz的代码:

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) 

希望有帮助