출력 개체가 모든 웹 표시 물건도 생성한다는 것이 문제입니다. 대신 다운로드를 위해 데이터를 별도로 가져와야합니다. 다운로드 코드에서 brushedPoints
에 대한 두 번째 호출을 통해이 작업을 수행 할 수 있습니다. 더 나은 그러나 그 모든 곳에서 당신이 그것을 필요로 전화 한 번만 그것을 할 수있는 reactive()
기능을 사용하는 것입니다. . 여기에 내가 그 일하도록 코드를 수정하는 것이 방법입니다, 당신은 명시 적으로 brushedPoints
그래서에서 xvar
및 yvar
을 설정할 필요가 없습니다
data(iris)
ui <- basicPage(
plotOutput("plot1", brush = "plot_brush"),
verbatimTextOutput("info"),mainPanel(downloadButton('downloadData', 'Download'))
)
server <- function(input, output) {
output$plot1 <- renderPlot({
ggplot(iris,aes(x=Sepal.Width,y=Sepal.Length)) + geom_point(aes(color=factor(Species))) + theme_bw()
})
selectedData <- reactive({
brushedPoints(iris, input$plot_brush)
})
output$info <- renderPrint({
selectedData()
})
output$downloadData <- downloadHandler(
filename = function() {
paste('SelectedRows', '.csv', sep='') },
content = function(file) {
write.csv(selectedData(), file)
}
)
}
shinyApp(ui, server)
(참고, ggplot2
과를, 나는의 유연성을 높이기 위해 여기를 제거 코드)
shiny
에 "올가미"스타일의 무료 드로잉 어빌리티가 없습니다 (단, 일주일에 한번씩 재미있는 툴을 추가하고 있습니다). 그러나 사용자가 여러 영역을 선택하거나 개별 점을 클릭하도록 허용하여 동작을 모방 할 수 있습니다. 당신이 반복해서 사용할 수 있도록하기 위해 reactiveValues
객체에 결과를 저장하기 위해 필요로하는 서버의 논리는, 많이 지저분를 가져옵니다. 한 플롯에서 점을 선택하고 다른 플롯에서 강조/제거 할 수 있도록 비슷한 작업을 수행했습니다. 그것은 당신이 여기 필요한 것보다 더 복잡합니다,하지만 아래에서 작동해야합니다. 다른 버튼/로직을 추가 할 수도 있습니다 (예 : 선택을 '재설정').하지만이 방법을 사용해야한다고 생각합니다. 플롯에 선택 표시를 추가하여 선택한 항목을 추적 할 수있게했습니다.
data(iris)
ui <- basicPage(
plotOutput("plot1", brush = "plot_brush", click = "plot_click")
, actionButton("toggle", "Toggle Seletion")
, verbatimTextOutput("info")
, mainPanel(downloadButton('downloadData', 'Download'))
)
server <- function(input, output) {
output$plot1 <- renderPlot({
ggplot(withSelected()
, aes(x=Sepal.Width
, y=Sepal.Length
, color=factor(Species)
, shape = Selected)) +
geom_point() +
scale_shape_manual(
values = c("FALSE" = 19
, "TRUE" = 4)
, labels = c("No", "Yes")
, name = "Is Selected?"
) +
theme_bw()
})
# Make a reactive value -- you can set these within other functions
vals <- reactiveValues(
isClicked = rep(FALSE, nrow(iris))
)
# Add a column to the data to ease plotting
# This is really only necessary if you want to show the selected points on the plot
withSelected <- reactive({
data.frame(iris
, Selected = vals$isClicked)
})
# Watch for clicks
observeEvent(input$plot_click, {
res <- nearPoints(withSelected()
, input$plot_click
, allRows = TRUE)
vals$isClicked <-
xor(vals$isClicked
, res$selected_)
})
# Watch for toggle button clicks
observeEvent(input$toggle, {
res <- brushedPoints(withSelected()
, input$plot_brush
, allRows = TRUE)
vals$isClicked <-
xor(vals$isClicked
, res$selected_)
})
# pull the data selection here
selectedData <- reactive({
iris[vals$isClicked, ]
})
output$info <- renderPrint({
selectedData()
})
output$downloadData <- downloadHandler(
filename = function() {
paste('SelectedRows', '.csv', sep='') },
content = function(file) {
write.csv(selectedData(), file)
}
)
}
shinyApp(ui, server)
마크,이 완벽하게 작동! 리 액티브 기능은 특히 유용합니다. 제 관심을 가져 주셔서 감사합니다. 정말 고마워. – KrisF
마크, brushedPoints의 옵션은 사용자가 사각형 내에서 포인트를 선택할 수 있도록 나에게 발생했습니다. 가능한 "올가미"옵션이 있습니까? 나는 주변을 수색했지만 Plot.ly에서 위의 스크립트를 다시 작성해야하는 "올가미"옵션을 찾을 수 없었다. – KrisF
직접 알지 못합니다. 그러나 여러 선택을하는 방법을 보여주는 편집을 추가 했으므로 결국에는 동일한 동작을 제공 할 수 있습니다. –