2017-01-10 6 views
1

ヒストグラムを使用して光沢のあるダッシュボードをプログラミングして、入力データを日付に従ってサブセット化することを試みています。R Shiny code - ggplotヒストグラムの反応スライダ

日付入力バーは機能していますが、範囲ではなく単一の時点のデータのみを提供します。誰かが私がコードで間違っていた箇所を指摘できますか?

私はserver.rとui.rコードと再現可能なデータを提供します。

SERVER.R

library(reshape) 
library(shiny) 
library(ggplot2) 


# GEN DATA ----------------------------------------------- 

dates = c("2014-01-01", "2014-02-01", "2014-03-01", "2014-04-01", "2014-01- 01", "2014-02-01", "2014-03-01", "2014-04-01", "2014-01-01", "2014-02-01") 
value = c ("3.2", "4.1", "3.8", "5.6", "2.1", "2.0", "1.0" , "4.5", "1.6", "2.9") 
dataset = cbind(dates, value) 
dataframe = data.frame(dataset) 
dataframe$dates <- as.Date(dataframe$dates, format = "20%y-%m-%d") 
dataframe$value <- as.numeric(dataframe$value) 

# SERVER ----------------------------------------------- 
shinyServer(function (input, output) { 


    # DATA 

    data.r = reactive({ 
    a = subset(dataframe, dates %in% input$daterange) 
return(a) 
    }) 



    # GGPLOT 

    mycolorgenerator = colorRampPalette(c('sienna','light grey')) 

    output$myplot = renderPlot({ 

    dd<-data.r() 
    # ggplot with proper reference to reactive function <<data.r()>> 
    s = ggplot(data=subset(dataframe, dates %in% input$daterange), aes (x=value)) + geom_histogram(data=subset(dd, dates%in% input$daterange) , aes(x=value)) 

print(s) 
    }) 
}) 

ui.R

# INPUT PART 

library(shiny) 

shinyUI(pageWithSidebar(
    # Application title 
    headerPanel("My App"), 

    sidebarPanel( 

    dateRangeInput("daterange", "Date range:", 
       start = "2014-01-01", 
       end = "2014-03-31", 
       min = "2014-01-01", 
       max = "2014-03-31", 
       format = "yyyy/mm/dd", 
       separator = "-"), 

    submitButton(text="Update!") 
), 
    # ----------------------------------------------- 

    # OUTPUT PART 

    mainPanel(
    tabsetPanel(
    tabPanel("Tab 1", h4("Head 1"),plotOutput("myplot")) 
    ) 
) 
)) 

答えて

0

あなたは、日付の間隔チェックをここではないマッチする文字列を行っています。 daterangeの作業には、データとまったく同じ値を格納し、UIコントロールがセットアップされていない2つ以上の日付を返す必要があります。

私はこれがあなたのために働くかもしれないと思います。

# inside interval 
start <- ymd("2014-01-01") 
end <- ymd("2014-02-01") 
my.interval <- interval(start, end) 
ymd("2014-01-05") %within% my.interval 
[1] TRUE 

# outside interval 
start <- ymd("2014-01-01") 
end <- ymd("2014-02-01") 
my.interval <- interval(start, end) 
ymd("2014-03-21") %within% my.interval 
[1] FALSE 

あなたは基本日付のパッケージでこれを管理することができますlubridateを使用する必要はありませんが、それはいくつかの作業が必要になります。

もう1つの回避策は、すべての日付をハードコードして別のコントロールを使用し、入力に対して複数選択を有効にすることです。例えば、selectizeInput(...)

0

あなたのサブセットが正しくありませんでした、次のようにコードを変更します。

server <- shinyServer(function (input, output) { 
    # DATA 
    data.r = reactive({ 
    a = subset(dataframe, dates >= input$daterange[1] & 
          dates <= input$daterange[2]) # add some validation code here 
          # to validate that input$daterange[2] >= input$daterange[1] 
    return(a) 
    }) 
    # GGPLOT 
    mycolorgenerator = colorRampPalette(c('sienna','light grey')) 
    output$myplot = renderPlot({ 
    dd<-data.r() 
    # ggplot with proper reference to reactive function <<data.r()>> 
    print(ggplot(dd, aes(x=value)) + geom_histogram()) 
    }) 
}) 

# INPUT PART 
library(shiny) 
ui <- shinyUI(pageWithSidebar(
    # Application title 
    headerPanel("My App"), 
    sidebarPanel( 
    dateRangeInput("daterange", "Date range:", 
        start = "2014-01-01", 
        end = "2014-03-31", 
        min = "2014-01-01", 
        max = "2014-03-31", 
        format = "yyyy/mm/dd", 
        separator = "-"), 

    submitButton(text="Update!") 
), 
    # OUTPUT PART 
    mainPanel(
    tabsetPanel(
     tabPanel("Tab 1", h4("Head 1"),plotOutput("myplot")) 
    ) 
) 
)) 

shinyApp(ui = ui, server = server) 

enter image description here

関連する問題