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 随手写了这个,但如果它不起作用,我会稍后再回来
这是我第一次同时使用 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 随手写了这个,但如果它不起作用,我会稍后再回来