не могу понять странное движение колонки - PullRequest
0 голосов
/ 01 мая 2020

Итак, я пытаюсь создать график развития короны, подобный следующему: barplot .

Пока я сделал это mine_bar_plot . Цвет указывает, есть ли увеличение или уменьшение в новых случаях до 100 000 поп за последние 14 дней. Число в конце столбцов - это новые фактические случаи на 100 000/14 дней.

Проблема заключается в перемещении баров между состояниями, когда они фактически не оказываются в новой позиции. Если вы посмотрите на США, их порядок ранга равен 1 на протяжении всей анимации, но все равно выглядит, как будто он меняет положение. Я попытался изменить между geom_tile, geom_bar, geom_barh, geom_col. Опробовал почти все комбинации enter_, exit_ и ease_aes (). Просто не могу понять, почему моя не похожа на других !

Вот мой код:

data <- data %>%
  group_by(date) %>%
mutate(
    order = min_rank(-Cases)*1,
    label = paste("", round(New_cases_last_14_pr_100k, digits=1))) %>% 
 filter(order <=15)%>%
  ungroup()

  p<-ggplot(data = data) +
  geom_tile(
    mapping = aes( 
      x = order,
      y = Cases / 2,
      height = Cases,
      fill = as.factor(Change)  
    ),
    width = 0.9,
    alpha = 0.9 
  ) +
scale_fill_manual(breaks = c("Increase","No Change","Decrease"),values=c("#D55E00","#56B4E9","#009E73"),drop=FALSE)+
    geom_text(
        mapping = aes(
            x = order,
            y = 0,
            label = Places.reporting.cases
        ),
        vjust = 0.2,
        hjust = 1
    ) +
    geom_text(
        mapping = aes(
            x = order,
            y = Cases,
            label = label
        ),
        vjust = 0.2,
        hjust = 0
    ) +
 scale_y_continuous(labels = scales::comma) +
  coord_flip(
    clip = "off",
    expand = FALSE,
     xlim = c(0.45, 15.55)) +
  scale_x_reverse() + 
  guides(color = FALSE, fill = FALSE) +
  labs(title = "{closest_state}", x = "", y = "Cases") +
  theme(
    plot.title = element_text(hjust = 0.5, size = 32),
    axis.ticks.y = element_blank(), 
    axis.text.y = element_blank(), 
    plot.margin = margin(1, 3, 1, 4, "cm")
  ) +
  transition_states(date, transition_length = 200000, state_length = 2000, wrap = FALSE)+enter_grow()+exit_shrink()
  ease_aes("cubic-in-out")

animate(p,duration = 30, nframes = 300, fps = 10, width =800, height = 600)
...