Все функциональные возможности плотно используют ggplot и глянцевый, чтобы создать очень интерактивный сюжет - PullRequest
0 голосов
/ 29 мая 2018

Я искал много ресурсов, и очень трудно найти воспроизводимый пример со всеми функциями интерактивного сюжета.Мне бы очень хотелось, чтобы график в блестящем приложении имел такие функциональные возможности, которые аналогичны параметрам, предлагаемым в plotly():

  1. . Имеется опция масштабирования при чистке области и двойном щелчке
  2. Имеет возможность удалять точки, соответствующие легендам.
  3. Отображает значения x и y точки при наведении вверху

Я не смог найти все эти функции в одном и том жекод.Я лично желаю, чтобы на каждом графике рассеяния были эти функции, если они используются в блестящем приложении.Благодаря этой функции в ggplot() многие люди предпочитают plotly().Увидев ответ на этот вопрос, я надеюсь, что все предпочтут использовать ggplot() alonf с shiny

. Я создал функцию масштабирования, помогите мне со второй и третьей функцией, то есть с возможностью удаления точек, соответствующих группе.1 при щелчке группы 1 в легендах и отображении значений точек x и y, когда мышь находится над ней.Спасибо !!!

Вот пример данных и кода для начала работы.

library(ggplot2)
library(ggrepel)
library(shiny)
ui=fluidPage(uiOutput("plot"))
server = function(input, output) {
  #creating a range variable for zooming 
  ranges <<- reactiveValues(x = NULL, y = NULL)
  #Creating sample Data
  Data=data.frame(Group=c("Group 2","Group 1","Group 3","Group 2","Group 5","Group 4","Group 6",
                          "Group 7","Group 4","Group 3","Group 1","Group 5","Group 6","Group 7",
                          "Group 2","Group 4","Group 6","Group 7","Group 3","Group 1"),
                  Fruit=c("apple","apple","apple","mango","apple","apple","apple","apple","mango","mango",
                          "mango","mango","mango","mango","orange","orange","orange","orange","orange",
                          "orange"),
                  Percentage=c(68.46846847,77.35849057,72.72727273,26.12612613,76.31578947,62.79069767,
                               71.05263158,69.23076923,30.23255814,25,20.75471698,23.68421053,23.68421053,
                               23.07692308,5.405405405,6.976744186,5.263157895,7.692307692,2.272727273,
                               1.886792453))
  #Creating the plor function
  output$graph<-renderPlot({
    ggplot(Data,aes(y=reorder(Fruit,Percentage),x=Percentage,
                    color=Group,
                    label=paste0(round(Percentage),"%")))+
      geom_point(size=4)+
      scale_x_continuous(limits=c(0,100))+
      theme(panel.grid.major.y=element_line(color="gray90",size = 0.7),
            panel.background=element_blank(),
            strip.background=element_blank(),
            panel.border=element_rect(color="black",fill=NA,size=1))+
      labs(y="",x="% of people",color="")+
      # geom_text_repel(direction="y",nudge_y = 0.2, point.padding = 0.1, box.padding = 0.1)+
      coord_cartesian(xlim = ranges$x, ylim = ranges$y, expand = T)
  })
  #Rendering the plot with the brush parameter
  output$plot=renderUI(
    plotOutput("graph",dblclick = "plot1_dblclick",brush = brushOpts(id = "plot1_brush",resetOnNew = TRUE),height=450,width=900)  
  )
  #To observe and change the limits of the graph (zooming)
  observeEvent(input$plot1_dblclick, {
    brush <- input$plot1_brush
    if (!is.null(brush)) {
      ranges$x <- c(brush$xmin, brush$xmax)
      ranges$y <- c(brush$ymin, brush$ymax)

    } else {
      ranges$x <- NULL
      ranges$y <- NULL
    }
  })
}
shinyApp(ui=ui,server=server)
...