Добавление нескольких графиков на основе ввода в Shiny R - PullRequest
0 голосов
/ 05 мая 2020

Я создаю список наблюдения за акциями, чтобы иметь возможность ввести тикер и добавить новый график для этого тикера без замены существующего графика. На данный момент существует только один график, который настраивается в зависимости от введенного тикера. Теоретически я хотел бы иметь возможность добавлять столько или несколько тикеров, сколько мне нужно, и иметь возможность видеть графики для этих тикеров сразу. Это достижимо? Ниже мой код. Заранее спасибо!

library(shiny)
library(quantmod)
library(ggplot2)
library(tibble)
# Define UI ----
ui <- fluidPage(
  titlePanel("CyCap Watchlist", "Watchlist"),
  sidebarLayout(
    sidebarPanel(
      helpText("Input a stock symbol.
               Data will be collected from Yahoo Finance."),
      textInput("symb","Symbol", "SPY"),
      dateRangeInput("dates","Date Range", start=Sys.Date()-365, end=Sys.Date()),
      br(),

    ),
    mainPanel("",
      fluidrow(        

      row(plotOutput("plot")))
    )
  )

)

# Define server logic ----
server <- function(input, output) {

  dataInput <- reactive({
    getSymbols(
      Symbols= input$symb, 
      src="yahoo", 
      from = input$dates[1], 
      to = input$dates[2],
      auto.assign = FALSE
    )
  })

   badf <- reactive({data.frame(dataInput())}) 


  baclosedf <- reactive({
    x <- subset(badf(), select=c(paste0(input$symb, ".Close")))
    x <- rownames_to_column(x, "Date")
    }) 


  output$plot <- renderCachedPlot({

  ggplot(
    data=baclosedf(), 
    mapping=aes(x="", y=baclosedf()[, paste0(input$symb, ".Close")], group=1, size=5, height=1))+
    geom_linerange(aes(ymin=min(baclosedf()[, paste0(input$symb, ".Close")]),ymax=tail(baclosedf()[, paste0(input$symb, ".Close")],n=1)),linetype="solid",color="red", size=3)+
    geom_linerange(aes(ymin=tail(baclosedf()[, paste0(input$symb, ".Close")], n=1)),ymax=max(baclosedf()[, paste0(input$symb, ".Close")]),linetype="solid",color="forestgreen", size=3)+
    geom_point(aes(y=min(baclosedf()[, paste0(input$symb, ".Close")])),size=3,color="black")+
    geom_point(aes(y=max(baclosedf()[, paste0(input$symb, ".Close")])),size=3,color="black")+
    geom_point(aes(y=tail(baclosedf()[, paste0(input$symb, ".Close")], n=1)),size=3,color="black")+
    scale_y_continuous(breaks = c(min(baclosedf()[, paste0(input$symb, ".Close")]), tail(baclosedf()[, paste0(input$symb, ".Close")], n=1), max(baclosedf()[, paste0(input$symb, ".Close")])))+  
    coord_flip()+
    labs(x="", y="", title=input$symb)+ 
    theme_bw()+
    theme(axis.ticks = element_blank())  
  }, 
  cacheKeyExpr = { list(input$symb, input$dates) }
  )

}

# Run the app ----
shinyApp(ui = ui, server = server)

1 Ответ

0 голосов
/ 13 мая 2020

Вы сталкивались с этой предыдущей публикацией на StackOverflow? Несколько графиков в R Shiny

Посмотрите, можете ли вы изменить это в соответствии со своими потребностями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...