This is my code for stock volatility for 10 stocks:
##------------producing stock volatility plot---------##
p1 = ggplot(Closed_Price_Return, aes(Date, R.BPCL)) + geom_line(color = "blue") +
theme_bw()
p2 = ggplot(Closed_Price_Return, aes(Date, R.TCS)) + geom_line(color = "green") +
theme_bw()
p3 = ggplot(Closed_Price_Return, aes(Date, R.CIPLA)) + geom_line(color = "red") +
theme_bw()
p4 = ggplot(Closed_Price_Return, aes(Date, R.EICHER)) + geom_line(color = "pink") +
theme_bw()
p5 = ggplot(Closed_Price_Return, aes(Date, R.INFY)) + geom_line(color = "yellow") +
theme_bw()
p6 = ggplot(Closed_Price_Return, aes(Date, R.LT)) + geom_line(color = "purple") +
theme_bw()
p7 = ggplot(Closed_Price_Return, aes(Date, R.MARUTI)) + geom_line(color = "orange") +
theme_bw()
p8 = ggplot(Closed_Price_Return, aes(Date, R.RELIANCE)) + geom_line(color = "#7fffd4") +
theme_bw()
p9 = ggplot(Closed_Price_Return, aes(Date, R.SUNPHARMA)) + geom_line(color = "#ff1493") +
theme_bw()
p10 = ggplot(Closed_Price_Return, aes(Date, R.YESBANK)) + geom_line(color = "#ff7256")+
theme_bw()
##------------Converting the ggplots into plotly objects-------##
p1 = ggplotly(p1)
p2 = ggplotly(p2)
p3 = ggplotly(p3)
p4 = ggplotly(p4)
p5 = ggplotly(p5)
p6 = ggplotly(p6)
p7 = ggplotly(p7)
p8 = ggplotly(p8)
p9 = ggplotly(p9)
p10 = ggplotly(p10)
Now i want to generate a dropdown menu button for all these charts. Please tell me how to proceed for button code in plotly
One way is (like the example on plotly page), create the plotly with all your traces invisible, then add a dropdown that switches the visible trace:
plot_ly(mtcars, x = ~gear) %>%
add_trace(y = ~cyl, name = "cyl", visible = F, color=I("blue")) %>%
add_trace(y = ~hp, name = "hp", visible = F, color=I("green")) %>%
add_trace(y = ~gear, name = "gears", visible = F, color=I("red")) %>%
layout(
yaxis = list(title = "y"),
updatemenus = list(
list(
y = 0.7,
buttons = list(
list(method = "restyle",
args = list("visible", list(TRUE, FALSE, FALSE)),
label = "cyl"),
list(method = "restyle",
args = list("visible", list(FALSE, TRUE, FALSE)),
label = "hp"),
list(method = "restyle",
args = list("visible", list(FALSE, FALSE, TRUE)),
label = "gear")))
)
)
In your case, just define a different y
in the add_trace
s. The TRUE
/FALSE
lists must be as long as you have traces in your Dropdown.
A different approach (straightforward) with a small shiny app:
library(shiny)
library(plotly)
p1 <- plot_ly(mtcars, x=~cyl, y=~gear)
p2 <- plot_ly(mtcars, x=~hp, y=~am)
ui <-shinyUI(fluidPage(selectInput("selectPlot", "Choose desired plot", choices=paste0("p", 1:2)), plotlyOutput("plot")))
server <- shinyServer(function(input,output){
output$plot <- renderPlotly({
return(get(input$selectPlot)) # get("p1") from the workspace returns the object p1, which is a plotly object
})
})
shinyApp(ui,server)