【问题标题】:Simultaneously move all geom bars according to vote percentage根据投票百分比同时移动所有几何条
【发布时间】:2021-12-01 15:15:49
【问题描述】:

我无法移动所有条形。我如何实现它?所有条形图应从 0 开始并移动到所需的摆动百分比。

library(ggplot2)
library(dplyr)
library(gganimate)
theme_set(theme_bw())  
#data <- read.csv("C:\\Daman\\swig.csv")
BHAGWANPUR <- structure(list(STATE = c("UTTARAKHAND", "UTTARAKHAND", "UTTARAKHAND"
), DISTRICT = c("HARDWAR", "HARDWAR", "HARDWAR"), AC = c("BHAGWANPUR", 
"BHAGWANPUR", "BHAGWANPUR"), PARTY = structure(1:3, .Label = c("INC", 
"BJP", "BSP"), class = "factor"), VOTES = c(44882L, 42369L, 4069L
), DELTA_VOTES = c(14835L, 31719L, -32759L), VOTE_PERCENTAGE = c(48.2, 
45.5, 4.4), SWING = c(9.9, 31.9, -42.5), X.CHANGE = c(49.4, 297.8, 
-89), BASE_SHARE = c(38.2, 13.6, 4.4), mpg_type = c("ABOVE", 
"ABOVE", "BELOW")), row.names = c(NA, -3L), class = "data.frame")
BHAGWANPUR$PARTY <- factor(BHAGWANPUR$PARTY,levels=BHAGWANPUR$PARTY)

# Diverging Barcharts
draw <- ggplot(BHAGWANPUR, aes(x=PARTY, y=SWING, label=SWING)) + 
  geom_bar(stat='identity', width=.5,aes(fill=PARTY)) +geom_text(aes(label=SWING,vjust="center"),position = position_stack(vjust = 0.5))+
  scale_fill_manual(values=c("#00BFFF","#F98C1F","#22409A"))+labs(subtitle="Vote swing among parties 2012 to 2017", 
                                                                  title= "Bhagwanpur,Uttarakhand") + 
  coord_flip()+  theme(axis.title.x=element_blank(),axis.title.y=element_blank())+theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
                                                                                        panel.background = element_blank(), axis.line = element_line(colour = "black"))+
  transition_states(SWING, transition_length = 1, state_length = 1,wrap = TRUE) +
  enter_fade() + 
  exit_shrink() +
  ease_aes('sine-in-out')

animate(draw, renderer = gifski_renderer())


【问题讨论】:

    标签: r ggplot2 gganimate


    【解决方案1】:

    您可以通过以下方式同时移动所有条形:

    首先,添加一个带有状态 0 和 1 的新列 'state',0 是状态条开始的状态(在 SWING == 0 处):

    BHAGWANPUR <- BHAGWANPUR %>%
      mutate(SWING = 0) %>%
      bind_rows(BHAGWANPUR) %>%
      mutate(state = case_when(SWING == 0 ~ 0,
                               TRUE ~ 1))
    

    然后,将状态添加到transition_states,例如。 G。像这样:

    draw <- ggplot(BHAGWANPUR, aes(x=PARTY, y=SWING, label=SWING)) + 
      geom_bar(stat='identity', aes(fill=PARTY)) +
      coord_flip()+
      transition_states(state, wrap=FALSE) +
      enter_grow() +
      ease_aes('sine-in-out')
    

    现在所有的柱形图都从零开始并同时增长到 SWING 值。我删除了exit_shrink 并设置了wrap = FALSE,因此条形不会回到零,但动画只是从头开始。

    【讨论】:

    • 确实有帮助,谢谢。我正在等待更多的解决方案。几天后我会接受你的回答。
    • 不用担心。实际上我对动画没有太多经验,但觉得它很有趣,使用 gganimate 有什么可能。你能告诉我,你在我的答案中遗漏了什么,所以我可以改进它吗?
    • 一切都好,没有任何问题。
    猜你喜欢
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多