Для правильного рендеринга графического вывода в 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)