Негладкий цветовой переход формы с твинером / трансформером - PullRequest
0 голосов
/ 19 февраля 2019

Я хочу плавно трансформировать цвет пятиконечной звезды в цвет десятиконечной звезды.

В настоящее время цветовой переход является резким, а не плавным.Я думаю, что неправильно использую

geom_sf(aes(fill = ...)) 

, но не знаю, как поступить.Вот что у меня есть.

library(transformr)
library(gganimate)
library(tidyverse)


star5_st <- sf::st_sfc(poly_star(n = 5, st = TRUE))
star10_st <- sf::st_sfc(poly_star(n = 10, st = TRUE))

# Move shape 2 over to the right a bit
star10_st <- star10_st + c(2.0, 0)

# Start state df  
df1 <- data.frame(
  id = c(1),
  geo = c(star5_st),
  fill_col = c("black")
)

# End state df  
df2 <- data.frame(
  id = c(1),
  geo = c(star10_st),
  fill_col = c("green")
)

morph <- tween_sf(df1, df2,
                  ease = 'linear', 
                  nframes = 12, 
                  id = id)

# Create frames
aa <- ggplot(morph) +
  geom_sf(aes(geometry = geometry, fill = fill_col)) +
  transition_time(time = .frame) +
  theme_void() +
  theme(legend.position = "none") +
  coord_sf(datum = NA) +
  scale_colour_identity() 

show <- animate(aa, nframes = 40, fps = 20, 
                renderer = gifski_renderer(loop = FALSE), start_pause = 5)


show

1 Ответ

0 голосов
/ 19 февраля 2019

Я думаю, вам, возможно, придется сделать цвет непрерывным, чтобы вы могли использовать scale_fill_gradient:

df1 <- data.frame(
    id = c(1),
    geo = c(star5_st),
    fill_col = 0
)

# End state df
df2 <- data.frame(
    id = c(1),
    geo = c(star10_st),
    fill_col = 1
)

morph <- tween_sf(df1, df2,
                  ease = 'linear',
                  nframes = 12,
                  id = id)

# Create frames
aa <- ggplot(morph) +
    geom_sf(aes(geometry = geometry, fill = fill_col)) +
    transition_time(time = .frame) +
    theme_void() +
    theme(legend.position = "none") +
    coord_sf(datum = NA) +
    scale_fill_gradient(low = "black", high = "green")
...