2016-10-04 7 views
-1

シャイニーアプリを無駄にしようと2日を費やしました。例を実行しても問題ありませんが、自分の好みに合わせて修正したい場合は、一定のエラーと機能の欠如があります。私の最初のRシャイニーアプリ

私は100 X観測と100 Y観測の単純なデータセットを持っています。ビンのスライダー入力でXとYの両方のヒストグラムをプロットしたいと思います。 X上にYの散布図を作成したいと思います。私は本当にここで助けていただきたいと思います。

私はRには新しくないが、私はシャイニーを初めて使っている。ビジュアルを作成するためにggplotを使用する方法はありますか?

多くのありがとうございます。

+1

組み込みのR機能と光沢のあるサンプルテンプレートから始めます。 'shiny :: renderPlot()'を使ってください。 'renderPlot()'の内部でヒストグラムの場合は 'hist()'を、ポストで言及したそれぞれのパラメータを持つ 'plot()'(散布図の場合)を返します。 XとYは静的なので、グローバルスコープに格納することができます。 – nilsole

+0

返事ありがとうございます。 :) – Seanosapien

答えて

1

これは2つの異なるレイアウトの簡単な例です。もちろん、ui.Rの1つを使用してください。 ui.Rとserver.R

ui.R V1

library(shiny) 
    library(ggplot2) 
    shinyUI(fluidPage(

     titlePanel("Quick Shiny Example"), 
     sidebarLayout(
     sidebarPanel(
      sliderInput("xBins", 
         "Number of bins for X variable:", 
         min = 1, 
         max = 50, 
         value = 30), 
      sliderInput("yBins", 
         "Number of bins for Y variable:", 
         min = 1, 
         max = 50, 
         value = 30) 
     ), 
     mainPanel(
      plotOutput("xDistPlot"), 
      plotOutput("yDistPlot"), 
      plotOutput("xyScatterPlot") 
     ) 
    ) 
    )) 

ui.R V2

library(shiny) 
    library(ggplot2) 
    shinyUI(fluidPage(
      titlePanel("Quick Shiny Example"), 
      fluidRow(
        column(width = 4, 
          sliderInput("xBins", 
             "Number of bins for X variable:", 
             min = 1, 
             max = 50, 
             value = 30) 
        ), 
        column(width = 4, 
          sliderInput("yBins", 
             "Number of bins for Y variable:", 
             min = 1, 
             max = 50, 
             value = 30) 
        ), 
        column(width = 4) 
      ), 
      fluidRow(
        column(width = 4, 
          plotOutput("xDistPlot") 
        ), 
        column(width = 4, 
          plotOutput("yDistPlot") 
        ), 
        column(width = 4, 
          plotOutput("xyScatterPlot") 
        ) 
      ) 
    )) 

server.Rと同じフォルダにglobal.Rを入れ

library(shiny) 
    library(ggplot2) 

    shinyServer(function(input, output) { 

     output$xDistPlot <- renderPlot({ 
     g <- ggplot(df, aes(x = x)) 
     g <- g + geom_histogram(bins = input$xBins) 
     g 
     }) 
     output$yDistPlot <- renderPlot({ 
       g <- ggplot(df, aes(x = y)) 
       g <- g + geom_histogram(bins = input$yBins) 
       g 
     }) 
     output$xyScatterPlot <- renderPlot({ 
       g <- ggplot(df, aes(x = x, y = y)) 
       g <- g + geom_point() 
       g 
     }) 

    }) 

global.R

df <- data.frame(
    x = rnorm(100), 
    y = rnorm(100)*2 
ここ

+0

絶対に素晴らしい。多くのありがとうございます。 – Seanosapien

1

はちょうど迅速なアイデアとして、XYのための乱数で、私の答えです。これにggplotを追加するのは簡単です。

library(shiny) 

ui <- shinyUI(
    fluidPage(
    sliderInput("nrBinsX", "Number of bins to display for X", min = 2, max = 10, value = 5), 
    plotOutput("histX"), 
    sliderInput("nrBinsY", "Number of bins to display for Y", min = 2, max = 10, value = 5), 
    plotOutput("histY"), 
    plotOutput("scatterXY") 
) 
) 

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

    dataFrame <- data.frame (
    "X" = sample(100,100,replace = T), 
    "Y" = sample(100,100,replace = T) 
) 

    getHist <- function (var,nr){ 
    return (hist(
     x = var, 
     breaks = seq(0,100,100/nr), 
     freq = T 
    )) 
    } 

    output$histX <- renderPlot({ 
     return(
     getHist(var = dataFrame$X, 
       nr = input$nrBinsX 
     )) }) 

    output$histY <- renderPlot({ 
     return(  return(
     getHist(var = dataFrame$Y, 
       nr = input$nrBinsY 
     ) 
    )) }) 

    output$scatterXY <- renderPlot({ 
    return(
     plot(x = dataFrame$X, 
      y = dataFrame$Y) 
    ) 
    }) 

}) 

shinyApp(ui = ui, server = server) 
+0

ありがとうございました。私はこのような明確で、構造の良い例を探すために何時間も費やしました。 :) – Seanosapien

関連する問題