2014-11-20 2 views
1

Я пытаюсь изменить планшет на основе диапазона дат, выбранного в Shiny. Ниже приведен код, который я использовал для получения статического графика с использованием ggplot2. Как я могу сделать это интерактивным для изменения диапазонов и получения сюжета соответственно?Vary участки, основанные на диапазоне дат, выбранных в R-shiny

server.R

library(RMySQL) 

con <- dbConnect(MySQL(), user="xxx", host="xxx", password="xxx", dbname="xxx") 
query <- function(...) dbGetQuery(con, ...) 

days <- query("SELECT date(date) as Date, count(*) as Count FROM article 
    where date BETWEEN NOW() - INTERVAL 30 DAY AND NOW() group by date(date)") 

shinyServer(function(input, output) { 
    #Each day plot 
    output$days.plot <- renderPlot({  
    days.plot<-ggplot(data=days, aes(x=Date, y=Count)) + geom_bar(stat="identity")  
    days.plot<-days.plot + theme(axis.text.x = element_text(angle = 45, hjust = 1)) 
    days.plot<-days.plot+ggtitle("example.com\nStories Published Per Day \n[For  Last 30 Days]") 
    print(days.plot) 
    }) 
} 

ui.R

library(shiny) 
library(ggplot2) 

shinyUI(fluidPage(
    titlePanel("My APP"), 
    sidebarLayout(
    sidebarPanel(
     sliderInput("Days-Range", 
       label="Range of Days:", 
       min=0,max=30, value = c(0,30)) 
    ), 
    mainPanel(

     plotOutput("days.plot"), 
    ) 
) 

))

Таблица данных

Date Count 
2014-10-21 179 
2014-10-22 140 
2014-10-23 225 
2014-10-24 248 
2014-10-25 137 
2014-10-26 116 

ответ

1
library(shiny) 
library(ggplot2) 
read.table(text = 'Date Count 
2014-10-21 179 
2014-10-22 140 
2014-10-23 225 
2014-10-24 248 
2014-10-25 137 
2014-10-26 116', header = TRUE, stringsAsFactor = FALSE) -> days 
days$Date <- as.Date(days$Date) 

Herer мы делаем days реактивный объект. Тогда в нашем ggplot вызова мы кондиционировать на sliderInput:

runApp(
    list(
    ui = fluidPage(
     titlePanel("My APP"), 
     sidebarLayout(
     sidebarPanel(
      sliderInput("Days-Range", 
         label="Range of Days:", 
         min=0,max=30, value = c(0,30)) 
     ), 
     mainPanel(
      plotOutput("days.plot") 
     ) 
    ) 
    ) 
    , server = function(input, output) { 
     myReactives <- reactiveValues(days = days) 
     output$days.plot <- renderPlot({  
     appDates <- seq(Sys.Date() - input$`Days-Range`[2], Sys.Date() - input$`Days-Range`[1], by = "days") 
     appData <- myReactives$days[myReactives$days$Date %in% appDates, ] 
     days.plot<-ggplot(data=appData, aes(x=Date, y=Count)) + geom_bar(stat="identity")  
     days.plot<-days.plot + theme(axis.text.x = element_text(angle = 45, hjust = 1)) 
     days.plot<-days.plot+ggtitle("example.com\nStories Published Per Day \n[For  Last 30 Days]") 
     print(days.plot) 
     }) 
    } 
) 
) 
+0

я получаю эту ошибку, ошибку в public_bind_env $ Initialize (...): попытка применить не-функцию Дополнительно: Предупреждение сообщения: В п.м. (list = as.character (handle), pos = .wsconns): объект '152106128' не найден Ошибка: попытка применить не-функцию – Anish

+0

@Ngeunpo Вы получаете эту ошибку, если скопируете и вставляете код, который я дал? – jdharrison

+0

Да, Ошибка в public_bind_env $ initialize (...): попытка применить не-функцию – Anish

Смежные вопросы