【问题标题】:How to use geom_smooth() with gganimate如何将 geom_smooth() 与 gganimate 一起使用
【发布时间】:2023-03-17 05:06:01
【问题描述】:

我很难理解如何将geom_smooth()gganimate 一起使用。

reprex 在下面可用。运行不包括transition_time 函数的绘图语句时,我按预期可视化静态绘图。

当我尝试使用transition_time()shadow_mark() 使该图动态化以保留点时,就会出现问题。出现以下错误:

$<-.data.frame(*tmp*, "group", value = "") 中的错误:替换 有 1 行,数据有 0

library(readr)
library(tidyr)
library(ggplot2)
library(gifski)
library(gganimate)
library(dplyr)

tst <- readr::read_csv("https://elpais.com/especiales/2019/elecciones-generales/encuestas-electorales/ficheros/tabla.csv?1554807308", 
                       col_types = cols(
                         date = col_date(format = "%d/%m/%y"),
                         house = col_character(),
                         sample = col_double(),
                         turnout = col_double(),
                         PP = col_double(),
                         PSOE = col_double(),
                         UP = col_double(),
                         Cs = col_double(),
                         ERC = col_double(),
                         PDC = col_double(),
                         PNV = col_double(),
                         PAC = col_double(),
                         BIL = col_double(),
                         CC = col_double(),
                         VOX = col_double(),
                         COM = col_double()
                       ))

tst %>% 
  select(date, house, PP, PSOE, UP, Cs, VOX) %>% 
  gather(key = partido, voto, PP, PSOE, UP, Cs, VOX) %>% 
  ggplot(aes(x = date, y = voto, color = partido)) +
  geom_point() + 
  geom_smooth(method = 'loess', formula = 'y ~ x', se = FALSE) +
  transition_time(time = date) + shadow_mark()
Error in `$<-.data.frame`(`*tmp*`, "group", value = ""): replacement
has 1 row, data has 0
In addition: There were 16 warnings (use warnings() to see them)

reprex package (v0.2.1) 于 2019-04-10 创建

我期待的是与此类似的内容 (source):

【问题讨论】:

    标签: r gganimate


    【解决方案1】:

    试试这个:

    tmp <- tst %>% 
      select(date, house, PP, PSOE, UP, Cs, VOX) %>% 
      gather(key = partido, voto, PP, PSOE, UP, Cs, VOX) %>%
      filter(!is.na(voto))
    
    ggplot(tmp, aes(x = date, y = voto, color = partido)) + 
      geom_smooth(method = "loess", formula = 'y ~ x', se = FALSE) + 
      geom_point(aes(group = rev(seq_along(date)))) +
      transition_reveal(rev(seq_along(date))) + shadow_mark()
    

    【讨论】:

    • 感谢@Raoul Duke!我认为这正在接近我的预期。以防万一,你知道如何让它们同时出现吗?
    • 我在这里不好@Raoul Duke,我所说的“他们”是指所有情节同时向前推进,而不是一个接一个
    • 没问题,我刚刚发表评论就明白了你的意图。我可以使用ggplot(tmp, aes(x = date, y = voto, color = partido, group = partido)) + geom_point() + transition_components(date) + shadow_mark() 获得积分。由于transition_components 不支持路径层,我不确定如何添加平滑。
    • 我正在尝试复制这个,但得到Error in `$&lt;-.data.frame`(`*tmp*`, "group", value = "") : replacement has 1 row, data has 0 In addition: There were 13 warnings (use warnings() to see them)
    猜你喜欢
    • 2022-11-02
    • 1970-01-01
    • 2019-08-17
    • 1970-01-01
    • 2020-01-26
    • 1970-01-01
    • 2019-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多