R Shiny:ggplot2 画笔功能的奇怪行为
R Shiny : Strange behavior of the brush functionality with ggplot2
请运行示例代码。
当我在散点图中 select 个点时,那些 select 个点将从图表中删除。它大部分工作正常,除了当我 select 一些点靠近图表的角落时,这些点将在快速双重自我更新后恢复。
对于位于图表中间部分的点,它工作正常。
如何解释这种奇怪的行为?
library(ggplot2)
library(shiny)
server <- function(input, output) {
vals = reactiveValues(keeprows = TRUE)
observeEvent(input$brush_1,{
cat("---------------\n")
print("brush_1")
Res = brushedPoints(mtcars,brush = input$brush_1,allRows = TRUE)
vals$keeprows = !Res$selected_
})
observeEvent(input$brush_2,{
cat("---------------\n")
print("brush_2")
Res = brushedPoints(mtcars,brush = input$brush_2,allRows = TRUE)
vals$keeprows = !Res$selected_
})
D = reactive({
print("D")
mtcars[vals$keeprows,]
})
output$p1 = renderPlot({
print("plot_1")
X = D()
ggplot(X,aes(x=mpg,y=cyl))+geom_point()
})
output$p2 = renderPlot({
print("plot_2")
ggplot(D(),aes(x=mpg,y=wt))+geom_point()
})
output$L = renderPrint({
Res = brushedPoints(mtcars,brush = input$brush_1,allRows = TRUE)
Res
})
}
ui <- fluidPage(
splitLayout(plotOutput("p1",brush = "brush_1"),plotOutput("p2",brush = "brush_2"))
,
verbatimTextOutput("L")
)
shinyApp(ui = ui, server = server)
似乎brush_1
事件被触发了两次,当那些奇怪的点被select编辑时剧情被重置。
当您取消选择绘图边界处的点时会出现问题,因为它会重新绘制以适应整个 space,这会取消设置画笔...
您可以在情节上设置修复限制以防止它:
ggplot(X,aes(x=mpg,y=cyl))+
geom_point()+
scale_x_continuous(limits=c(min(mtcars$mpg),max(mtcars$mpg)))+
scale_y_continuous(limits=c(min(mtcars$cyl),max(mtcars$cyl)))
请运行示例代码。
当我在散点图中 select 个点时,那些 select 个点将从图表中删除。它大部分工作正常,除了当我 select 一些点靠近图表的角落时,这些点将在快速双重自我更新后恢复。
对于位于图表中间部分的点,它工作正常。
如何解释这种奇怪的行为?
library(ggplot2)
library(shiny)
server <- function(input, output) {
vals = reactiveValues(keeprows = TRUE)
observeEvent(input$brush_1,{
cat("---------------\n")
print("brush_1")
Res = brushedPoints(mtcars,brush = input$brush_1,allRows = TRUE)
vals$keeprows = !Res$selected_
})
observeEvent(input$brush_2,{
cat("---------------\n")
print("brush_2")
Res = brushedPoints(mtcars,brush = input$brush_2,allRows = TRUE)
vals$keeprows = !Res$selected_
})
D = reactive({
print("D")
mtcars[vals$keeprows,]
})
output$p1 = renderPlot({
print("plot_1")
X = D()
ggplot(X,aes(x=mpg,y=cyl))+geom_point()
})
output$p2 = renderPlot({
print("plot_2")
ggplot(D(),aes(x=mpg,y=wt))+geom_point()
})
output$L = renderPrint({
Res = brushedPoints(mtcars,brush = input$brush_1,allRows = TRUE)
Res
})
}
ui <- fluidPage(
splitLayout(plotOutput("p1",brush = "brush_1"),plotOutput("p2",brush = "brush_2"))
,
verbatimTextOutput("L")
)
shinyApp(ui = ui, server = server)
似乎brush_1
事件被触发了两次,当那些奇怪的点被select编辑时剧情被重置。
当您取消选择绘图边界处的点时会出现问题,因为它会重新绘制以适应整个 space,这会取消设置画笔...
您可以在情节上设置修复限制以防止它:
ggplot(X,aes(x=mpg,y=cyl))+
geom_point()+
scale_x_continuous(limits=c(min(mtcars$mpg),max(mtcars$mpg)))+
scale_y_continuous(limits=c(min(mtcars$cyl),max(mtcars$cyl)))