Отображение графического представления в R Shiny - PullRequest
0 голосов
/ 17 июня 2020

Я следую руководству по kmeans в R Shiny Gallery и хотел изменить, чтобы использовать три переменные и построить график в трехмерном разбросе. Ошибок нет, но график не отображается. Вроде должно сработать ... что я делаю не так?

data <- iris %>% select(-Species)

# this works
# data %>%
#   plot_ly(x = ~Petal.Length, y = ~Petal.Width, z = ~Sepal.Length) %>%
#   add_markers()

server = function(input, output, session) {

  # Combine the selected variables into a new data frame
  selectedData <- reactive({
    data[, c(input$xcol, input$ycol, input$zcol)]
  })

  clusters <- reactive({
    kmeans(selectedData(), input$clusters)
  })

  output$plot1 <- renderPlotly({
    selectedData() %>%
      plot_ly(x = ~input$xcol, y = ~input$ycol, z = ~input$zcol) %>%
      add_markers()
  })

}

ui <- 

  pageWithSidebar(
    headerPanel('Iris'),
    sidebarPanel(
      selectInput('xcol', 'X Variable', names(data)),
      selectInput('ycol', 'Y Variable', names(data)),
      selectInput('zcol', 'Z Variable', names(data)),
      numericInput('clusters', 'Cluster count', value = 3, step = .5, min = 1, max = 10)
    ),
    mainPanel(
      plotOutput('plot1')
    )
  )

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

1 Ответ

0 голосов
/ 17 июня 2020

Для правильного рендеринга графического вывода в Shiny вам нужно использовать plotlyOutput вместо plotOutput.

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

В любом случае, хороший ресурс для лучшего понимания shiny - https://mastering-shiny.org/

Надеюсь, это помогло :)

library(shiny)
library(plotly)

data <- iris %>% select(-Species)

server = function(input, output, session) {

# I Combined the selected variables into a new data frame
# and added a new column with the cluster id assignated to each observation

selectedData <- reactive({
  res <- data[, c(input$xcol, input$ycol, input$zcol)]
  k <- kmeans(res, input$clusters)
  clusters <- k$cluster
  res$clusters <- clusters
  res
})

output$plot1 <- renderPlotly({
  df <- selectedData()
  plot_ly(x = df[, input$xcol], y = df[, input$ycol], z = df[, input$zcol],
        color = df$clusters) %>%
  add_markers()
})

}

ui <- pageWithSidebar(
 headerPanel('Iris'),
 sidebarPanel(
  selectInput('xcol', 'X Variable', names(data), selected = names(data)[1]),
  selectInput('ycol', 'Y Variable', names(data), selected = names(data)[2]),
  selectInput('zcol', 'Z Variable', names(data), selected = names(data)[3]),
  numericInput('clusters', 'Cluster count', value = 3, step = 1, min = 1, max = 10)
 ),
 mainPanel(
  plotlyOutput('plot1')
 )
)

# Run the application 
shinyApp(ui = ui, server = server)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...