/ / Rシャイニー、リンクされたボックスプロットのグループのようにggplotボックスプロットが自分自身を更新しないようにする方法-r、ggplot2、シャイニー、ボックスプロット、ジッター

R Shiny、リンクされたボックスプロットのグループのように、ggplotボックスプロットの更新を止める方法 - r、ggplot2、shiny、boxplot、jitter

リンクされた箱ひげ図のグループを作成すると(1つの箱ひげ図でポイントを選択すると、すべての箱ひげ図の対応するポイントが強調表示されます)、箱ひげ図は不確実な回数(場合によっては1回だけ、場合によっては最大20回)更新され続けます。

次のサンプルコードを実行してください。

問題の原因はgeom_jitter()だと思います。箱ひげ図が更新されないようにする方法はありますか?ありがとう。

library(shiny)
library(ggplot2)

server <- function(input, session, output) {

X = data.frame(x1 = rnorm(1000),
x2 = rnorm(1000),
week = sample(LETTERS[1:10],1000,replace = TRUE)
)

D = reactive({
brushedPoints(X,input$brush_1, allRows = TRUE)
})

output$p1 = renderPlot({
set.seed(123)
ggplot(D(),aes(x=week,y=x1))+
geom_boxplot() +
geom_jitter(aes(color=selected_))+
scale_color_manual(values = c("black","red"),guide=FALSE)


})

output$p2 = renderPlot({
set.seed(123)
ggplot(D(),aes(x=week,y=x2))+
geom_boxplot() +
geom_jitter(aes(color=selected_))+
scale_color_manual(values = c("black","red"),guide=FALSE)

})

}

ui <- fluidPage(
splitLayout(
plotOutput("p1",brush = "brush_1"),
plotOutput("p2",brush = "brush_1")
)
)

shinyApp(ui = ui, server = server)

更新:2016-9-16

私は交換しようとした geom_jitter 〜と geom_point、しかし、チャートはまだ更新を続けています。

そう geom_jitter 容疑者ではないかもしれません。

では、地球上の問題の原因は何ですか?

回答:

回答№1は1
library(shiny)
library(ggplot2)

server <- function(input, session, output) {

X = data.frame(x1 = rnorm(1000),
x2 = rnorm(1000),
week = sample(LETTERS[1:10],1000,replace = TRUE)
)

vals <- reactiveValues(
keeprows = rep(TRUE,nrow(X))

)

D = reactive({
R=cbind(X,vals$keeprows)
#print(sum(R[,"vals$keeprows"]==TRUE))
R
})

output$p1 = renderPlot({
set.seed(123)
ggplot(D(),aes(x=week,y=x1))+
geom_boxplot() +
geom_jitter(aes(colour=vals$keeprows))+
scale_color_manual(values = c("black","red"),guide=FALSE)


})

output$p2 = renderPlot({
set.seed(123)

ggplot(D(),aes(x=week,y=x2))+
geom_boxplot() +
geom_jitter(aes(color=vals$keeprows))+
scale_color_manual(values = c("black","red"),guide=FALSE)

})

observeEvent(input$brush_1,{
Res=brushedPoints(X,input$brush_1,allRows = TRUE)
vals$keeprows = Res$selected_

})

observeEvent(input$brush_2,{
Res=brushedPoints(X,input$brush_2,allRows = TRUE)
vals$keeprows = Res$selected_

})

observeEvent(input$exclude_reset,{
vals$keeprows = rep(TRUE,nrow(X))

})

}

ui <- fluidPage(
actionButton("exclude_reset","Reset"),
splitLayout(
plotOutput("p1",brush = brushOpts("brush_1",resetOnNew = TRUE)),
plotOutput("p2",brush = brushOpts("brush_2",resetOnNew = TRUE))
)
)

shinyApp(ui = ui, server = server)

回答№2の場合は1

理由は、ソーステーブルが常に保持しているためだと思いますプロットの1つをブラッシングすると更新されます。すべてのプロットが同じブラシIDを使用しているため、どのinput $ brush_1が実際の「ブラシ」アクションであるかを識別できません。 1つのグラフがブラシ処理され、input $ Brush_1が変更され、リアクティブテーブルDも更新されます。新しいリアクティブテーブルプロットに基づく別のプロットを再度実行し、input $ brush_1を再度変更します...

上記の考えから、あなたのコードに基づいて、入力ブラシアクションをさまざまなプロットから区別するための新しいもの。箱ひげ図が不確実な回数だけ更新し続けるという問題は解決されたようです。 plsは以下のコードを試してください: