与 shinydashboard 巧妙地结合
Integrate plotly with shinydashboard
我已经在几个小规模项目中使用了 shiny,现在正在尝试使用看起来很有前途的 shinydashboard 包。我也想用plotly集成交互式plot(虽然以后可以考虑其他库)
我没有问题 运行宁宁示例在 shiny (example) 中进行了 plotly 集成,但是在尝试使用 shinydashboard 实现类似结果时遇到了问题。
例如,下面的代码 (app.R) 无法正常工作。
library(shiny)
library(shinydashboard)
library(plotly)
library(ggplot2)
data(movies, package = "ggplot2")
minx <- min(movies$rating)
maxx <- max(movies$rating)
#######
####### UI
#######
ui <- dashboardPage(
############# Header
dashboardHeader(title = "Test"),
############# Sidebar
dashboardSidebar(
sidebarMenu(
menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard"))
)
),
############# Dashboard body
dashboardBody(
# Boxes need to be put in a row (or column)
fluidRow(
box(plotOutput("plot1"), width=6, height=500),
box(plotOutput("plot2"), width=6, height=500)
)
)
)
#######
####### Server
#######
server <- function(input, output, session) {
output$plot1 <- renderPlot({
# a simple histogram of movie ratings
p <- plot_ly(movies, x = rating, autobinx = F, type = "histogram",
xbins = list(start = minx, end = maxx, size = 2))
# style the xaxis
layout(p, xaxis = list(title = "Ratings", range = c(minx, maxx), autorange = F,
autotick = F, tick0 = minx, dtick = 2))
})
output$plot2 <- renderPlot({
hist(movies$rating, col="blue")
})
}
shinyApp(ui, server)
该页面应该显示两个相似的图:一个是用 plotly 生成的,另一个是用 R base 生成的。第二个显示正确,但 plotly 显示在 Rstudio 查看器面板中。如果我 运行 终端上的应用程序使用 运行App() 函数,一个网页会打开用于仪表板,而另一个网页仅用于 plotly interactive plot。
我尝试创建一些反应性绘图(绘图根据一些闪亮控件(如滑动条)的内容而变化)并且在查看器或其他浏览器中打开的绘图 window/tab 已更新。
所以一切似乎都正常,唯一的问题是 plotly plot 没有插入到仪表板中,而是插入到不同的位置(查看器或其他选项卡),这当然是一个问题。
尽管我进行了研究,但我找不到解决问题的方法(甚至有人提到它......)。有什么线索吗?
仔细查看教程,我认为你需要在ui
中替换
box(plotOutput("plot1"), width=6, height=500)
来自
box(plotlyOutput("plot1"), width=6, height=500)
并在 server
中替换
output$plot1 <- renderPlot({
......
来自
output$plot1 <- renderPlotly({
....
我已经在几个小规模项目中使用了 shiny,现在正在尝试使用看起来很有前途的 shinydashboard 包。我也想用plotly集成交互式plot(虽然以后可以考虑其他库)
我没有问题 运行宁宁示例在 shiny (example) 中进行了 plotly 集成,但是在尝试使用 shinydashboard 实现类似结果时遇到了问题。
例如,下面的代码 (app.R) 无法正常工作。
library(shiny)
library(shinydashboard)
library(plotly)
library(ggplot2)
data(movies, package = "ggplot2")
minx <- min(movies$rating)
maxx <- max(movies$rating)
#######
####### UI
#######
ui <- dashboardPage(
############# Header
dashboardHeader(title = "Test"),
############# Sidebar
dashboardSidebar(
sidebarMenu(
menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard"))
)
),
############# Dashboard body
dashboardBody(
# Boxes need to be put in a row (or column)
fluidRow(
box(plotOutput("plot1"), width=6, height=500),
box(plotOutput("plot2"), width=6, height=500)
)
)
)
#######
####### Server
#######
server <- function(input, output, session) {
output$plot1 <- renderPlot({
# a simple histogram of movie ratings
p <- plot_ly(movies, x = rating, autobinx = F, type = "histogram",
xbins = list(start = minx, end = maxx, size = 2))
# style the xaxis
layout(p, xaxis = list(title = "Ratings", range = c(minx, maxx), autorange = F,
autotick = F, tick0 = minx, dtick = 2))
})
output$plot2 <- renderPlot({
hist(movies$rating, col="blue")
})
}
shinyApp(ui, server)
该页面应该显示两个相似的图:一个是用 plotly 生成的,另一个是用 R base 生成的。第二个显示正确,但 plotly 显示在 Rstudio 查看器面板中。如果我 运行 终端上的应用程序使用 运行App() 函数,一个网页会打开用于仪表板,而另一个网页仅用于 plotly interactive plot。
我尝试创建一些反应性绘图(绘图根据一些闪亮控件(如滑动条)的内容而变化)并且在查看器或其他浏览器中打开的绘图 window/tab 已更新。 所以一切似乎都正常,唯一的问题是 plotly plot 没有插入到仪表板中,而是插入到不同的位置(查看器或其他选项卡),这当然是一个问题。
尽管我进行了研究,但我找不到解决问题的方法(甚至有人提到它......)。有什么线索吗?
仔细查看教程,我认为你需要在ui
box(plotOutput("plot1"), width=6, height=500)
来自
box(plotlyOutput("plot1"), width=6, height=500)
并在 server
中替换
output$plot1 <- renderPlot({
......
来自
output$plot1 <- renderPlotly({
....