【问题标题】:RCharts + Shiny dynamically change chart dataRCharts + Shiny 动态改变图表数据
【发布时间】:2016-01-15 20:39:49
【问题描述】:

这是我第一次同时使用 rcharts 和闪亮。我正在尝试创建一个基本的闪亮应用程序,用户可以从下拉菜单中选择股票并在 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"))
  )
))

服务器.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)
  })
}
)

【问题讨论】:

    标签: r shiny rcharts


    【解决方案1】:

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

    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)
      })
    
    })
    

    用我的手机写这个,但如果它不起作用,我稍后会回圈

    【讨论】:

    • 遗憾的是没有用(除非下面的代码是错误的。我没有保留 stockA/B.name 代码,因为它没有实际使用):observeEvent(input$Submit, { chart.data&lt;-subset(stocks_data, Company.Names %in% input$stockA | Company.Names %in% input$stockB) ####### output$StockPlot&lt;-renderChart2({ plot1&lt;-nPlot(Close~Date,data=chart.data() ,group='Company.Names',type='lineChart') return(plot1) }) })
    • 我没有看到你在服务器脚本之外有一个反应...很多事情发生了......你看过这个例子吗? shiny.rstudio.com/tutorial/lesson6
    • 我做到了,但因为它使用的是 quantmod package/getSymbols 命令,所以对我来说并不是很有用。我了解反应式的一般概念,只是不确定如何制作反应式数据框/从中创建图表。
    • 但要点是您希望应用程序可以使用历史数据...允许用户根据一些输入进行过滤...然后在图表中查看过滤数据的呈现输出,对吗?所有可用的选择都来自静态数据文件中提供的股票代码。数据集并没有按照我的判断流入,对吗?
    • 我在 ui.R 代码中使用 actionButton 而不是 inputButton 重试了代码并且它有效,所以问题可能是我没有内部和外部的单独名称(用户查看的文本)价值观。 (即 ui.R 代码 = actionButton("submitButton","Submit") 而不是 inputButtion(感谢您的帮助!)
    猜你喜欢
    • 2014-03-20
    • 1970-01-01
    • 2015-12-25
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    • 2017-05-30
    • 1970-01-01
    相关资源
    最近更新 更多