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