Есть ли способ добавить легенду рядом с меткой в ​​R, не совсем на графике?

Я построил график, используя dygraph функция из пакета R графов. Интересно, есть ли способ поставить легенду рядом с сюжетом, не совсем так, как это делается по умолчанию...

Код для воспроизведения этого рисунка ниже:

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()

1 ответ

Решение

Да читаю ?dygraphs::dyLegend, Описание labelsDiv аргумент говорит:

Показывать метки данных во внешнем div, а не на графике. Это значение должно быть идентификатором элемента div.

Конечно, это легко сделать в блестящем контексте, но не в rstudio.

Например, в Shiny ui.R файл, я добавил эту строку:

box(title = "Legend", textOutput("legendDivID"))

Который создает HTML <div> тег с идентификатором legendDivID, Затем в блестящий server.R файл, я использую тот же идентификатор в параметрах dygraphs:

dygraph(...) %>% dyLegend(labelsDiv = "legendDivID")

И это работает как шарм.

В вашем случае вот результат:

И код (просто создать app.R Сценарий в RStudio и запустить его, позвонив 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)
Другие вопросы по тегам