два ggplot2 предыдущих для преобразования в сюжет для получения интерактивного - PullRequest
2 голосов
/ 10 апреля 2020

У меня есть два ggplot2, которые я хочу преобразовать в ggplotly с идеей взаимодействия между обеими фигурами. Проблема в том, что DF для второго нуждается в трансформации. Я знаю, как сделать это с помощью плотно с нуля, но мне нужно сделать это с ggplot2.

Вот мой код:

require(dplyr)
require(lubridate)
require(ggplot2)
require(gridExtra)
require(plotly)

Мои данные:

df1<-tibble(date=seq.Date(as.Date("2000-01-01"),as.Date("2003-12-31"),by="1 month"),
           value=sample(10:20,48,replace = TRUE))

df2<-df1 %>% mutate(year=year(date))

df3<-df2 %>% 
  group_by(year) %>% 
    summarise(max=max(value),mean=mean(value),min=min(value))

Это окончательный результат с ggplot2 без взаимодействия

graf1<-ggplot(df2)+geom_line(aes(date,value,color=factor(year),group=year),size=4)

graf2<-ggplot(df3)+
          geom_segment(aes(x=year,xend=year,y=min,yend=max,color=factor(year),group=year),size=10)+
          geom_point(aes(year,mean),size=2)

grid.arrange(graf1,graf2,nrow=2)

Это мое предложение сделать это с ggplot2 до ggplotly (и не работает)

df2Linked<-highlight_key(df2,~year)

graf1<-ggplot(df2Linked)+geom_line(aes(date,value,color=factor(year),group=year),size=4)
graf1Ly<-ggplotly(graf1)%>% highlight(on = "plotly_hover", off = "plotly_deselect")
#it works!!

#**that NOT WORK in this way**, as its an object of class "c('SharedData', 'R6')"
df3<-df2Linked %>% group_by(year) %>% summarise(max=max(value),mean=mean(value),min=min(value))

graf2<-ggplot(df3)+geom_segment(aes(x=year,xend=year,y=min,yend=max,color=factor(year),group=year),size=10)+geom_point(aes(year,mean),size=2)
graf2Ly<-ggplotly(graf2)%>% highlight(on = "plotly_hover", off = "plotly_deselect")

subplot(graf1Ly,graf2Ly,nrows=2)

Каким образом быть сделано это? спасибо

1 Ответ

0 голосов
/ 17 апреля 2020

Я предлагаю использовать ggplotly() на каждом графике, а затем использовать subplot() из plotly

Это не очень хороший сюжет, но я думаю, что он поможет вам:

graf1<-ggplot(df2)+
        geom_line(aes(date,value,color=factor(year),group=year),size=4) + 
        labs(color='Year') 

graf2<-ggplot(df3)+
          geom_segment(aes(x=year,xend=year,y=min,yend=max,color=factor(year),group=year),size=10)+
          geom_point(aes(year,mean),size=2) + 
          labs(color='Year')



subplot(ggplotly(graf1),ggplotly(graf2), nrows = 2)

Выход: image

...