RCharts + Shiny 动态改变图表数据

RCharts + Shiny dynamically change chart data

这是我第一次同时使用 rcharts 和 shiny。我正在尝试创建一个基本的闪亮应用程序,用户可以在其中从下拉菜单中选择股票并在 rcharts 图表中比较它们的表现(我想使用 rcharts 进行交互)。

我已设法创建下拉菜单和 rcharts 图表,但无法获取创建图表所依据的数据以进行更改。代码如下:

ui.R

    shinyUI(fluidPage(
  titlePanel("S&P 500 Retroactive Stock Comparision - 2009 and 2010"),
  sidebarLayout(
    sidebarPanel(uiOutput("stockA"), uiOutput("stockB"),submitButton("Submit")),
    mainPanel(showOutput("StockPlot","NVD3"))
  )
))

server.R:

stock.names<-reactive({
  ## data from :  http://pages.swcp.com/stocks/#historical%20data 
  stocks_data<-read.table("S.P.500_data.txt",sep=",")
  colnames(stocks_data)<-c("Date","Ticker","Open","High","Low","Close","Volume") 
  stocks_data$Date<- as.Date(as.character(stocks_data$Date), "%Y%m%d")

  stocks_data$Percent.Change<-((stocks_data$High-stocks_data$Low)/stocks_data$Open)*100

  #get company names + match with ticker symbols
  library(RCurl)
  company_names1 <- "http://data.okfn.org/data/core/s-and-p-500-companies/r/constituents.csv"
  company_names2<-getURL(company_names1)
  company_names3<-read.csv(textConnection(company_names2))

  stocks_data$Company.Names<-company_names3[match(stocks_data$Ticker,company_names3$Symbol),"Name"]

  x<-sort(unique(as.character(stocks_data$Company.Names)))
  return(x)
})

library(rCharts)


shinyServer(function(input,output){
  ########
  output$stockA <- renderUI({ 
    selectInput("stockA", "Select your first stock to compare:",choices=stock.names() )
  })
  ##########
  output$stockB <- renderUI({ 
    selectInput("stockB", "Select your second stock to compare:",choices=stock.names() )
  })

  ########
stockA.name<- reactive({
  input$StockA
}) 
  #########
stockB.name<- reactive({
  input$StockB
})

#######

chart.data<-reactive({
  data<-subset(stocks_data, Company.Names %in% input$stockA | Company.Names %in% input$stockB)
 return(data)
})
  ####### 
  output$StockPlot<-renderChart2({
    plot1<-nPlot(Close~Date,data=chart.data() ,group='Company.Names',type='lineChart')
    return(plot1)
  })
}
)

尝试将会话添加到您的服务器参数,然后您应该可以使用

observeEvent(input $Submit, {

  stockA.name <- input$StockA
  stockB.name <- input$StockB

  chart.data <- subset(stocks_data, Company.Names %in% input$stockA | 
                                    Company.Names %in% input$stockB)

  output$StockPlot<-renderChart2({
    plot1 <- nPlot(Close~Date,data=chart.data(), 
                   group='Company.Names',type='lineChart')
    return(plot1)
  })

})

我的 phone 随手写了这个,但如果它不起作用,我会稍后再回来