2017-12-22 4 views
1

Ich möchte eine plotly Grafik auf glänzend, sehr einfach machen ... aber ich verstehe es nicht ... es ist ein Candlestick Graph ... Ich lade Daten von Yahoo Finanzen, ich lege es in einer Liste und ich erstelle einen Datenrahmen nach was wir sehen wollen ... aber es funktioniert nicht, es lädt alle außer dem Graphen mit dem Satz: "Erstes Argument, data, muss ein Datenrahmen oder geteilte Daten sein"R glänzend reaktive plotly Grafik

library(shiny) 
library(quantmod) 
library(lubridate) 
library(plotly) 
library(dplyr) 
trim<-Sys.Date()- months(3) 
#floor_date(ajd,"month") 

comp<-c("CAC 40","Total","Sanofi","BNP","LVMH","Airbus","Axa","L'Oreal","Air Liquide","Danone","Vinci","Schneider","Societe Generale","Kering","Orange") 
ref<-data.frame("^FCHI","FP.PA","SAN.PA","BNP.PA","MC.PA","AIR.PA","CS.PA","OR.PA","AI.PA","BN.PA","DG.PA","SU.PA","GLE.PA","KER.PA","ORA.PA") 
colnames(ref)<-comp 

for (i in 1:length(comp)){ 
    stock<-ref[1,i] 
    stock<-as.character(stock) 
    getSymbols(stock,src="yahoo",from=trim,to=Sys.Date()) 
} 
for (i in 1:length(comp)){ 
    ref[,i]<-as.character(ref[,i]) 
} 
ref[,1]<-c("FCHI") 

data<-list() 
for (i in 1:length(comp)){ 
    data[[i]]<-get(ref[,i]) 
} 



# Define UI for application that draws a histogram 
shinyUI(fluidPage(

    # Application title 
    titlePanel("Top companies of CAC 40 Analysis"), 

    # Sidebar with a slider input for number of bins 
    sidebarLayout(
    sidebarPanel(
     h1("Companies"), 
     selectInput("titre","Company:", 
        choice=colnames(ref)), 
     hr(), 
     helpText("Data from yahoo finance") 
    ), 

    # Show a plot of the generated distribution 
    mainPanel(
     h3("Evolution du cours"), 
     plotlyOutput("graph") 
    ) 
) 
)) 


library(shiny) 
library(quantmod) 
library(lubridate) 
library(plotly) 
library(dplyr) 



# Define server logic required to draw a histogram 
shinyServer(function(input, output) { 

    sortie<-reactive({ 
    compa<-input$titre 
    temp<-data.frame(Date=index(data[[compa]]),coredata(data[[compa]])) 
    colnames(temp)<-c("Date","Open","High","Low","Close","Volume","Adjusted") 
    }) 

    output$graph <- renderPlotly({ 
    plot_ly(sortie,x=sortie$Date,type="candlestick", 
      open=sortie$Open,close=sortie$Close,high=sortie$High,low=sortie$Low) 
    layout(title="Quaterly evolution") 
    }) 


}) 

Wenn jemand etwas, was ich falsch gemacht ...

+0

Reactive Datenrahmen benötigen wie eine Funktion aufgerufen werden: 'sortie()' –

+0

ja, ich habe es vergessen, aber es funktioniert noch nicht ... ich habe auch den $ datum usw. durch temp $ Date usw. geändert, aber es funktioniert noch nicht –

Antwort

1

Hallo zusammen wasa ein paar Probleme mit Ihrem Code zuerst diefindenwar kein benannte Liste, damit ich die Linie

temp<-data.frame(Date=index(data[[compa]]),coredata(data[[compa]])) 
geändert

zu

temp<-data.frame(Date=index(data[[which(compa == comp)]]),coredata(data[[which(compa == comp) ]])) 

den richtigen Index von comnp

erhalten dann wurden Sie nicht den Datenrahmen von sortie Rückkehr, sondern die Vektor der Spaltennamen. Ich habe gerade einen Anruf an temp am Ende von sortie hinzugefügt, um dies zu beheben. Das letzte, was Ryan in seinem Kommentar mit den Klammern nach sortie erwähnt hat. Unten folgt eine funktionierende Version des Servercodes. Ich habe nichts anderes geändert.

function(input, output) { 

    Sortie<-reactive({ 
    compa<-input$titre 
    temp<-data.frame(Date=index(data[[which(compa == comp)]]),coredata(data[[which(compa == comp) ]])) 
    colnames(temp)<-c("Date","Open","High","Low","Close","Volume","Adjusted") 
    temp 
    }) 

    output$graph <- renderPlotly({ 
    sortie <- Sortie() 
    plot_ly(sortie,x=sortie$Date,type="candlestick", 
      open=sortie$Open,close=sortie$Close,high=sortie$High,low=sortie$Low) %>% 
     layout(title="Quaterly evolution") 
    }) 


} 
1

Es war, dass aber ich hinzugefügt, um die Namen von Unternehmen in der Liste in ui Code: Werke

data<-list() 
for (i in 1:length(comp)){ 
    data[[i]]<-get(ref[,i]) 
} 
names(data)<-comp 

Also nach meiner ursprünglichen Code mit, dass:

shinyServer(function(input, output) { 

    sortie<-reactive({ 
    compa<-input$titre 
    temp<-data.frame(Date=index(data[[compa]]),coredata(data[[compa ]])) 
    colnames(temp)<-c("Date","Open","High","Low","Close","Volume","Adjusted") 
    temp 
    }) 

    output$graph <- renderPlotly({ 
    sortie<-sortie() 
    plot_ly(sortie,x=~Date,type="candlestick", 
      open=~Open,close=~Close,high=~High,low=~Low)%>% 
      layout(title="Quarterly evolution") 
    }) 


})