Я хочу иметь возможность удалять точки данных, выбирая их на графике.
Этот примерный код выполняет следующие действия:
В пользовательском интерфейсе я создаю 2 selectInputs, который управляет тем, какие данные используются для осей x и y. Затем я создаю график и включаю выбор точек на графике. Под графиком показаны выбранные в данный момент точки. Также есть кнопка «Удалить данные», но она еще ни к чему не подключена.
На сервере я создаю фрейм данных "de" и присваиваю моим осям x и y (XVar, YVar) значения пользовательского интерфейса. Затем я пытаюсь создать реактивное значение для основного фрейма данных
dePlot<-reactive({de})
Моя цель с этими переменными:
Иногда я хочу навсегда изменить базовые данные (например, удалить данные), а затем написать «де». Иногда я хочу переменную, которая сбрасывается каждый раз, чтобы "де" в каждом, например. наблюдатель или выходное событие.
У меня такое чувство, что я не достигаю этой цели таким образом ...
Тогда я создаю сюжет.
Затем следует вывод $ brush_info и наблюдение за событием.
«Output $ brush_info» возвращает текущее значение dePlot и фильтры для используемых в настоящее время осей x и y. Таким образом, я не удаляю данные, которые в данный момент не отображаются на графике. И затем выбранные точки отправляются в пользовательский интерфейс.
Событие наблюдения получает выбранные значения и фильтрует каждую выбранную строку из фрейма данных, а затем сохраняет его в главном фрейме данных «de».
print(de)
показывает мне, что фильтрация работает так, как задумано.
Но это на самом деле не обновляет «de» и, следовательно, не «dePlot», поэтому мой график остается неизменным. Я предполагаю, что это потому, что я "пойман" в событии наблюдения и не могу передать переменные оттуда. У меня такое чувство, что я действительно близок, но просто не понимаю реактивных значений, достаточных для того, чтобы закончить.
Надеюсь, я сделал эту проблему не слишком запутанной, и каждая помощь приветствуется.
Мой интерфейс
library("shiny")
library("shinyFiles")
library("shinydashboard")
library("shinyBS")
library("plotly")
library("jpeg")
library("imager")
shinyUI(
dashboardPage(
dashboardHeader(disable = T),
dashboardSidebar(width = 200,
sidebarMenu(width=3,
menuItem(startExpanded = T,
selectInput("XVar","Please Select X-Axis",
choices=c("eins","zwei","drei"),selected="eins"),
selectInput("YVar","Please Select Y-Axis",
choices=c("eins","zwei","drei"),selected="zwei")
)
)
),
dashboardBody(width=9,
tabItem(tabName = 'box2',
tabBox(width = 16,
tabPanel("Long time data",plotOutput("myPlot", click = "plot1_click",brush = brushOpts(id = "plot1_brush"))
,actionButton('DeleteData?','DeleteSelectedData'),column(width = 6,h4("Brushed points"),verbatimTextOutput("brush_info"))
)
)
)
)
)
)
Мой сервер
shinyServer(function(input, output,session){
eins<-c(1,2,3,4,5,6,7,8,9,10)
zwei<-c(4,6,3,4,400,-500,900,8,12,5)
drei<-c(989,663,74,543,222,1541,1515,12,525,21)
isolate({de<-data.frame(eins,zwei,drei)})
XVar<-reactive({input$XVar})
YVar<-reactive({input$YVar})
dePlot<-reactive({de})
output$myPlot <-renderPlot({
ggplot(data=dePlot())+
geom_line(aes_string(x=XVar(),y=YVar()
)
)
})
output$brush_info <- renderPrint({
deBrush<-dePlot()[,c(XVar(),YVar())]
brushedPoints(deBrush, input$plot1_brush)
})
observe({
Var1<-brushedPoints(dePlot(), input$plot1_brush,allRows = TRUE)
Var12<-as.numeric((row.names(Var1[Var1$selected_==TRUE,])))
de<-dePlot()[-Var12,]
print(de)
})
})