ggplotly с гистограммой - не может заставить его работать - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь анимировать гистограмму с помощью функции плотности с наложением через ggplotly, используя код, который выглядит как

ggplot() +
   geom_point(data_1 = aes(..some aesthetic.., frame = step)) +
   geom_hist(data_2 = aes(..some other aesthetic.., frame = step))

Этот код не работает, но мне кажется, что в целом гистограммыне работают с ggplotly.Мне интересно, может ли кто-нибудь из вас помочь.

Данные

Вот пример;frame - это переменная для определения индекса анимации

# Some data (points) for the first aes
df_1 = data.frame(x = 1:10, y = 1:10, frame = 1:10)

# Other data (for each frame multiple values from 3 groups)
df_2 = lapply(1:10, function(w)
         data.frame(
            val = runif(10, min = w, max = w + 1),  # Value
            code = sample(1:3, 10, replace = TRUE), # Color for fill
            frame = w)
         )
df_2 = Reduce(rbind, df_2)

Точки ggplots отрисовывается идеально, как и анимация ggplotly(pl).

pl = ggplot() + 
   geom_point(data = df_1, aes(x, y, frame = frame)) 

# OK!
print(pl)
plotly::ggplotly(pl)

Гистограмма

ggplots отрисовывает отлично.

gg_pl = ggplot() +
   geom_histogram(data = df_2, aes(
       val, 
       fill = factor(code), 
       frame = frame)) +
    scale_fill_brewer()

# OK
print(gg_pl)

, но рендеринг с помощью ggplotly падает

# Error!
plotly::ggplotly(gg_pl)

Ошибкаin -data $ group: недопустимый аргумент для унарного оператора

Гистограмма + Точки

Как и раньше, ggplot работает, но анимация - нет.

pl = ggplot() + 
   geom_point(data = df_1, aes(x, y, frame = frame)) + 
   geom_histogram(data = df_2, 
        aes(val, fill = factor(code), frame = frame))

# OK!
print(pl)

# Errors as before
plotly::ggplotly(pl)

1 Ответ

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

Это не совсем то, что вы ищете, но это начало, и, возможно, это поможет.Вот анимированная гистограмма с использованием plot_ly.

library(plotly)
p = df_2 %>% 
  plot_ly(x=~val, 
          type='histogram', 
          color=~code,
          frame=~frame, 
          alpha=0.7)
p 

Мне не удалось анимировать точки с помощью гистограммы, но здесь то же самое с точками сверху.Если вы раскомментируете строку #frame=~frame, точки будут анимированы, но гистограмма исчезнет, ​​за исключением первого и последнего кадра.

  p = plot_ly() %>%
  add_histogram(data=df_2, 
                x=~val, 
                color=~code, 
                frame=~frame)%>%
  add_trace(data=df_1, 
            x=~x, 
            y=~y, 
            frame=~frame, 
            type='scatter', 
            mode='markers')
p %>% animation_opts(easing='linear')
...