Shinyの習作、その4です。出力したプロットからインタラクティブにデータを取得する例です。
RStudioのversion 2022.12.0 Build 353。R version 4.2.2で動作を確認しています。
コマンドの紹介
詳細はコマンド、各パッケージのヘルプを確認してください。実行コマンドが短いのでui.Rとserver.Rに分けずに紹介します。コンソールにペーストして実行すると動作します。
#パッケージの読み込み if (!require("shiny")) { install.packages("shiny")} if (!require("ggplot2")) { install.packages("ggplot2")} ###データ例の作成##### n <- 50 TestData <- data.frame("Group" = sample(paste0("Group", 1:5), n, replace = TRUE), "Data1" = sample(1:10, n, replace = TRUE), "Data2" = sample(1:10, n, replace = TRUE)) ######## #GUI設定 ui <- fluidPage( fluidRow( #fluidRow内に記述すると横並び column(width = 4, #ggplotをプロット plotOutput("ggplot", height = 300, #plotをインタラクティブに選択する:brushOptsオプション #選択エリアの塗色を指定:fillオプション brush = brushOpts( id = "plot_brush", fill = "yellow" ) )), column(width = 4, #barplotをプロット plotOutput("barplot", height = 300) ) ), fluidRow( column(width = 4, p("選択範囲に含まれる情報"), #処理結果を整形して出力:verbatimTextOutputコマンド verbatimTextOutput("brushData") ) ) ) #処理内容設定 server <- function(input, output) { #ggplot2処理 output$ggplot <- renderPlot({ ggplot(TestData, aes(Data2, Data1)) + geom_point(aes(col = topo.colors(nrow(TestData)))) + guides(colour = FALSE) }) #barplot処理 output$barplot <- renderPlot({ if(length(GetData()[, 1]) >= 1){ barplot(xtabs(~as.character(GetData()[, 1])), col = topo.colors(5)) }else{} }) #選択範囲のデータ出力 output$brushData <- renderPrint({ brushedPoints(GetData(), input$plot_brush) }) #選択範囲のデータを取得 GetData <- reactive({ brushedPoints(TestData, input$plot_brush) }) } #shinyアプリ起動 shinyApp(ui, server)
実行例
・Chromeでの実行例です。
少しでも、あなたの解析が楽になりますように!!