R shiny - 结合ggplot2和plotly垂直堆叠2个子图
R shiny - combining ggplot2 and plotly to stack vertically 2 subplots
我想在闪亮的应用程序中垂直堆叠 2 个图,并使用 plotly 使它们具有交互性。
我有以下代码:
library(shiny)
library(tidyverse)
library(patchwork)
library(plotly)
ui <- fluidPage(
tabsetPanel(
tabPanel('Plot', plotOutput('plot')),
tabPanel('Plot2', plotly::plotlyOutput('plot2')),
tabPanel('Plot3', plotly::plotlyOutput('plot3'))
)
)
server <- function(input, output) {
output$plot <- renderPlot({
p1 <- ggplot(data = mtcars, aes(x = mpg, y = cyl)) +
geom_line()
p2 <- ggplot(data = mtcars, aes(x = mpg, y = disp)) +
geom_line()
p1 / p2
})
output$plot2 <- renderPlotly({
p1 <- ggplot(data = mtcars, aes(x = mpg, y = cyl)) +
geom_line()
})
output$plot3 <- renderPlotly({
p1 <- ggplot(data = mtcars, aes(x = mpg, y = cyl)) +
geom_line()
p2 <- ggplot(data = mtcars, aes(x = mpg, y = disp)) +
geom_line()
p1 / p2
})
}
# Run the application
shinyApp(ui = ui, server = server)
如您所见,当仅将 ggplot2 与 patchwork 包(“Plot”)一起使用时,它可以按预期工作并堆叠 p1 和 p2 垂直。此外,在“Plot2”中,当仅使用 ggplot2 绘制 p1 时,它会与 plotly 交互。
然而,在“Plot3”中尝试转换组合图 (p1 / p2) 的“Plot”时使用 patchwork要使用 plotly 进行交互,它只会将 p2 图绘制为交互图。
关于如何使用 ggplot2 创建垂直堆叠图,然后使它们在 Shiny App 中与 plotly 交互的任何建议?
在 R plotly 中,您可以通过 subplot
函数实现此目的:
library(shiny)
library(tidyverse)
library(patchwork)
library(plotly)
ui <- fluidPage(
tabsetPanel(
tabPanel('Plot', plotOutput('plot')),
tabPanel('Plot2', plotly::plotlyOutput('plot2')),
tabPanel('Plot3', plotly::plotlyOutput('plot3'))
)
)
server <- function(input, output) {
output$plot <- renderPlot({
p1 <- ggplot(data = mtcars, aes(x = mpg, y = cyl)) +
geom_line()
p2 <- ggplot(data = mtcars, aes(x = mpg, y = disp)) +
geom_line()
p1 / p2
})
output$plot2 <- renderPlotly({
p1 <- ggplot(data = mtcars, aes(x = mpg, y = cyl)) +
geom_line()
})
output$plot3 <- renderPlotly({
p1 <- ggplot(data = mtcars, aes(x = mpg, y = cyl)) +
geom_line()
p2 <- ggplot(data = mtcars, aes(x = mpg, y = disp)) +
geom_line()
subplot(p1, p2, nrows = 2)
})
}
# Run the application
shinyApp(ui = ui, server = server)
请参阅this了解更多信息。
我想在闪亮的应用程序中垂直堆叠 2 个图,并使用 plotly 使它们具有交互性。
我有以下代码:
library(shiny)
library(tidyverse)
library(patchwork)
library(plotly)
ui <- fluidPage(
tabsetPanel(
tabPanel('Plot', plotOutput('plot')),
tabPanel('Plot2', plotly::plotlyOutput('plot2')),
tabPanel('Plot3', plotly::plotlyOutput('plot3'))
)
)
server <- function(input, output) {
output$plot <- renderPlot({
p1 <- ggplot(data = mtcars, aes(x = mpg, y = cyl)) +
geom_line()
p2 <- ggplot(data = mtcars, aes(x = mpg, y = disp)) +
geom_line()
p1 / p2
})
output$plot2 <- renderPlotly({
p1 <- ggplot(data = mtcars, aes(x = mpg, y = cyl)) +
geom_line()
})
output$plot3 <- renderPlotly({
p1 <- ggplot(data = mtcars, aes(x = mpg, y = cyl)) +
geom_line()
p2 <- ggplot(data = mtcars, aes(x = mpg, y = disp)) +
geom_line()
p1 / p2
})
}
# Run the application
shinyApp(ui = ui, server = server)
如您所见,当仅将 ggplot2 与 patchwork 包(“Plot”)一起使用时,它可以按预期工作并堆叠 p1 和 p2 垂直。此外,在“Plot2”中,当仅使用 ggplot2 绘制 p1 时,它会与 plotly 交互。
然而,在“Plot3”中尝试转换组合图 (p1 / p2) 的“Plot”时使用 patchwork要使用 plotly 进行交互,它只会将 p2 图绘制为交互图。
关于如何使用 ggplot2 创建垂直堆叠图,然后使它们在 Shiny App 中与 plotly 交互的任何建议?
在 R plotly 中,您可以通过 subplot
函数实现此目的:
library(shiny)
library(tidyverse)
library(patchwork)
library(plotly)
ui <- fluidPage(
tabsetPanel(
tabPanel('Plot', plotOutput('plot')),
tabPanel('Plot2', plotly::plotlyOutput('plot2')),
tabPanel('Plot3', plotly::plotlyOutput('plot3'))
)
)
server <- function(input, output) {
output$plot <- renderPlot({
p1 <- ggplot(data = mtcars, aes(x = mpg, y = cyl)) +
geom_line()
p2 <- ggplot(data = mtcars, aes(x = mpg, y = disp)) +
geom_line()
p1 / p2
})
output$plot2 <- renderPlotly({
p1 <- ggplot(data = mtcars, aes(x = mpg, y = cyl)) +
geom_line()
})
output$plot3 <- renderPlotly({
p1 <- ggplot(data = mtcars, aes(x = mpg, y = cyl)) +
geom_line()
p2 <- ggplot(data = mtcars, aes(x = mpg, y = disp)) +
geom_line()
subplot(p1, p2, nrows = 2)
})
}
# Run the application
shinyApp(ui = ui, server = server)
请参阅this了解更多信息。