Интерактивная диаграмма рассеяния в R с использованием Plotly и Shiny - PullRequest
0 голосов
/ 09 ноября 2018

Я относительно новичок в Shiny and Plotly и у меня есть следующий фрагмент кода:

#
# This is a Shiny web application. You can run the application by clicking
# the 'Run App' button above.
#
# Find out more about building applications with Shiny here:
#
#    http://shiny.rstudio.com/
#

library(shiny)
library(plotly)
library(odbc)
library(DBI)



# Define UI for application that draws a histogram
ui <- fluidPage(

   # Application title
   titlePanel("Demo"),

   #Sidebar with a slider input for number of bins
   sidebarLayout(
      sidebarPanel(
         sliderInput("bins",
                     "Number of bins:",
                     min = 0,
                     max = 100,
                     value = 70)
      ),

      # Show a plot of the generated distribution
      mainPanel(
        tabPanel("Heading", plotlyOutput("tbTable"))

      )
   )
)

# Define server logic required to draw a histogram
server <- function(input, output, session) {

  QueriedData <- reactive({

    connn <- DBI::dbConnect(odbc::odbc(),.connection_string = "XXX", uid = "AB", pwd = "CD")
    lat_rec.df <- dbGetQuery(connn, "PQR")
    dbDisconnect(connn)
    lat_rec.df1
  })  


   output$tbTable <- renderPlotly({

     plot_ly(QueriedData(),x = ~TotalCount, y = ~MyScore, type = 'scatter', mode = 'markers')

  })

}

# Run the application 
shinyApp(ui = ui, server = server)

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

  1. Я хочу использовать ползунок в качестве оси Y (MyScore). Как я могу это сделать? В настоящее время я не могу связать ползунок (ячейки) в свой график. Я хочу обновить график рассеяния в соответствии с ползунком ввода.
  2. Я немного озадачен реактивными функциями. Означает ли это, что каждый раз, когда я меняю ползунок, вызывается БД (в реактивной функции)? Как это работает?
  3. Если у меня есть другие таблицы базы данных для чтения и печати в других областях, включить ли я их в реактивную функцию? Пожалуйста, совет.

Заранее спасибо за вашу помощь! Ура!

1 Ответ

0 голосов
/ 09 ноября 2018

Мои решения / ответы на ваши три вопроса.

1.Как вы хотите узнать, как управлять осью Y с помощью sliderInput, код ниже объясняет, как это сделать.

library(shiny)
library(plotly)
library(DBI)
library(pool)

pool <- dbPool(drv = RMySQL::MySQL(),dbname = "db",host = "localhost",username = "root",password = "psw", port = 3306)
data <- dbGetQuery(pool, "SELECT * FROM testTable;")
ui <- fluidPage(
  titlePanel("Demo"),
  sidebarLayout(
    sidebarPanel(
      sliderInput("bins", "Number of bins:", min = 0, max = 100, value = 70)
    ),
    mainPanel(
      tabPanel("Heading", plotlyOutput("tbTable"), 
               plotOutput("basicPlot") # Added extra as an Example for 3rd question
               )
    )
  )
)
server <- function(input, output, session) {
  QueriedData <- reactive({
    df <- data[data$total <= input$bins,] # filtering datafarme based on sliderInput
    return(df)
  })
  output$tbTable <- renderPlotly({
    plot_ly(QueriedData(), x = ~count, y = ~total, type = 'scatter', mode = 'markers')
  })
  # Added extra as an Example for 3rd question
  output$basicPlot <- renderPlot({
    data_for_plot <- dbGetQuery(pool, "SELECT * FROM dummyTable WHERE uid = 2018;")
    plot(x = data_for_plot$category, y = data_for_plot$performance, type = "p")
  })
}
shinyApp(ui = ui, server = server)

2Для реактивности лучше извлечь таблицу в информационный кадр один раз, а затем поместить этот информационный кадр в реактивную среду.Так что вы можете избежать нескольких вызовов базы данных.Вы можете проверить приведенный выше код на то же самое.

3. Использование среды reactive зависит только от требований, когда вы хотите иметь интерактивность с вашим блестящим приложением.Если вы хотите получить данные из других таблиц и использовать их на разных графиках, нет необходимости размещать строку подключения к базе данных в реактивной среде.Просто запросите базу данных согласно вашему требованию, как в приведенном выше коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...