我的第一个R闪亮应用程序

时间:2016-10-04 10:55:40

标签: shiny

我花了两天时间试图创建一个闪亮的应用程序无济于事。运行示例很好但是当我想根据自己的喜好修改它时,我只会遇到不断的错误和缺乏功能。

我有一个100 X观测和100 Y观测的简单数据集。我想用箱子的滑块输入绘制X和Y的直方图。我还想在X上创建Y的散点图。我非常感谢这里的一些帮助。

我不是R的新手,但我是Shiny的新手。有没有办法可以用ggplot创建视觉效果?

非常感谢。

2 个答案:

答案 0 :(得分:1)

这是一个包含两种不同布局的快速示例。当然使用ui.R之一。将global.R放在与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

    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

答案 1 :(得分: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)