有没有办法在 R 中的 dygraph 旁边添加图例,而不是在图上?
Is there a way to add legend next to a dygraph in R, not exactly on the plot?
我使用 dygraphs R 包中的 dygraph
函数绘制了一个 dygraph。我想知道有没有办法把图例放在图旁边,而不是像默认那样完全放在图上...
重现此 dygraph 的代码如下:
library(archivist)
library(dplyr)
library(devtools)
devtools::install_github("rstudio/dygraphs")
library(dygraphs)
seriesReactive <- loadFromGithubRepo( "db914a43536d4d3f00cf3df8bf236b4a", user= "MarcinKosinski", repo="Museum", value = TRUE)
dygraph(seriesReactive, main = "Dzienna proporcja kliknięć do odsłon dla danych struktur", ylab = "Proporcja") %>%
dyRangeSelector()
是,阅读 ?dygraphs::dyLegend
。 labelsDiv
参数的描述说:
Show data labels in an external div, rather than on the graph. This value should be a div element id.
这在 shiny context of course, but not in rstudio 中很容易做到。
例如,在 Shiny ui.R
文件中,我添加了这一行:
box(title = "Legend", textOutput("legendDivID"))
创建一个 HTML <div>
标签,ID 为 legendDivID
。
然后,在 Shiny server.R
文件中,我在 dygraphs 参数中使用相同的 ID:
dygraph(...) %>% dyLegend(labelsDiv = "legendDivID")
它就像一个魅力。
对于您的情况,结果如下:
和代码(只需在 RStudio 中创建 app.R
脚本并通过调用 shiny::runApp()
运行):
## app.R ##
library(shinydashboard)
library(shiny)
library(dygraphs)
ui <- dashboardPage(
dashboardHeader(title = "Page title"),
dashboardSidebar(sidebarMenu(menuItem("tab title", tabName = "tab", icon = icon("globe")))),
dashboardBody(
tabItems(
tabItem(tabName = "tab",
fluidRow(
box(dygraphOutput("graph"), width=9),
box(textOutput("legendDivID"), title = "Legend", collapsible = TRUE, width=3)
)
)
)
)
)
server <- function(input, output) {
library(archivist)
library(dplyr)
seriesReactive <- loadFromGithubRepo( "db914a43536d4d3f00cf3df8bf236b4a", user= "MarcinKosinski", repo="Museum", value = TRUE)
output$graph <- renderDygraph({
withProgress(message = "Loading...", {
dygraph(seriesReactive, main = "Dzienna proporcja kliknięć do odsłon dla danych struktur", ylab = "Proporcja") %>%
dyRangeSelector() %>%
dyLegend(labelsDiv = "legendDivID")
})
})
}
shinyApp(ui, server)
我使用 dygraphs R 包中的 dygraph
函数绘制了一个 dygraph。我想知道有没有办法把图例放在图旁边,而不是像默认那样完全放在图上...
重现此 dygraph 的代码如下:
library(archivist)
library(dplyr)
library(devtools)
devtools::install_github("rstudio/dygraphs")
library(dygraphs)
seriesReactive <- loadFromGithubRepo( "db914a43536d4d3f00cf3df8bf236b4a", user= "MarcinKosinski", repo="Museum", value = TRUE)
dygraph(seriesReactive, main = "Dzienna proporcja kliknięć do odsłon dla danych struktur", ylab = "Proporcja") %>%
dyRangeSelector()
是,阅读 ?dygraphs::dyLegend
。 labelsDiv
参数的描述说:
Show data labels in an external div, rather than on the graph. This value should be a div element id.
这在 shiny context of course, but not in rstudio 中很容易做到。
例如,在 Shiny ui.R
文件中,我添加了这一行:
box(title = "Legend", textOutput("legendDivID"))
创建一个 HTML <div>
标签,ID 为 legendDivID
。
然后,在 Shiny server.R
文件中,我在 dygraphs 参数中使用相同的 ID:
dygraph(...) %>% dyLegend(labelsDiv = "legendDivID")
它就像一个魅力。
对于您的情况,结果如下:
和代码(只需在 RStudio 中创建 app.R
脚本并通过调用 shiny::runApp()
运行):
## app.R ##
library(shinydashboard)
library(shiny)
library(dygraphs)
ui <- dashboardPage(
dashboardHeader(title = "Page title"),
dashboardSidebar(sidebarMenu(menuItem("tab title", tabName = "tab", icon = icon("globe")))),
dashboardBody(
tabItems(
tabItem(tabName = "tab",
fluidRow(
box(dygraphOutput("graph"), width=9),
box(textOutput("legendDivID"), title = "Legend", collapsible = TRUE, width=3)
)
)
)
)
)
server <- function(input, output) {
library(archivist)
library(dplyr)
seriesReactive <- loadFromGithubRepo( "db914a43536d4d3f00cf3df8bf236b4a", user= "MarcinKosinski", repo="Museum", value = TRUE)
output$graph <- renderDygraph({
withProgress(message = "Loading...", {
dygraph(seriesReactive, main = "Dzienna proporcja kliknięć do odsłon dla danych struktur", ylab = "Proporcja") %>%
dyRangeSelector() %>%
dyLegend(labelsDiv = "legendDivID")
})
})
}
shinyApp(ui, server)