2017-07-20 6 views
1

Ich möchte die Legende einer dygraph innerhalb einer shiny App auf der linken Seite der Handlung (innerhalb der dygraph) platzieren. Mein Problem ist, dass ich die absolute Breite des dygraph nicht festlegen kann, da die App auf verschiedenen Bildschirmen mit unterschiedlichen Auflösungen läuft.dyLegend align left in einer shiny-app

kann der Code aussehen:

ui.r:

library(dygraphs) 
shinyUI(fluidPage(
    titlePanel("Simple example"), 
    sidebarLayout(
    sidebarPanel(), 
    mainPanel(
    dygraphOutput("dygraph") 
) 
) 
)) 

server.r

library(dygraphs) 
shinyServer(function(input, output, session) { 
output$dygraph <- renderDygraph({ 
    dygraph(discoveries) 
}) 
}) 

Gibt es eine Möglichkeit, die width der dygraph zu bekommen? Oder vielleicht eine einfachere Lösung, die Legende auf die linke Seite auszurichten?

Antwort

1

Wenn Sie die Legende auf der linken oberen Ecke ausrichten, dann können Sie die folgenden CSS:

.dygraph-legend { 
    left: 70px !important; 
    background-color: transparent !important; 
} 

Sie konnten dieses tableHTML::make_css verwenden, um Ihren Code leicht hinzufügen:

library(shiny) 
library(tableHTML) 
library(dygraphs) 
ui <- shinyUI(fluidPage(
tags$style(make_css(list('.dygraph-legend', 
          c('left', 'background-color'), 
          c('70px !important', 'transparent !important')))), 
titlePanel("Simple example"), 
sidebarLayout(
    sidebarPanel(), 
    mainPanel(
    dygraphOutput("dygraph", width = '80%') 
) 
) 
)) 

server <- shinyServer(function(input, output, session) { 
output$dygraph <- renderDygraph({ 
    lungDeaths <- cbind(mdeaths, fdeaths) 
    dygraph(lungDeaths) 
}) 
}) 

shinyApp(ui = ui, server = server) 

Wenn Sie die Breite des Diagrammcontainers ändern möchten, können Sie die Argumentbreite in dygraphOutput

verwenden
+0

Während Ihr Code nur die 'Breite' des' mainPanel' beeinflusst, funktioniert der Trick mit CSS-Styling perfekt! Danke vielmals! – smoff

+0

Sie sind herzlich willkommen, froh, dass ich helfen konnte. Ich änderte die Antwort, um den Code zu zeigen, der dein Problem löst, d. H. Den CSS-Trick. Ich fügte auch eine nette Möglichkeit hinzu, um CSS-Stile über den R-Code in das UI einzubinden (falls es hilft). – LyzandeR

0

Eine Möglichkeit wäre, column zu verwenden und die Breite von 1 bis 12 zu wählen. Hier ist der ui.R-Code mit 2 für die Legende und 10 für den Dygraph.

library(dygraphs) 
shinyUI(fluidPage(
    titlePanel("Simple example"), 
    sidebarLayout(
     sidebarPanel(), 
     mainPanel(
      column(2, 
       h3("My Legend") 
      ), 
      column(10, 
       dygraphOutput("dygraph") 
      ) 
     ) 
    ) 
)) 
+0

Das gibt mir nur Platz für eine Legende AUSSERHALB des DYGraph. Aber ich möchte die Legende innerhalb des Dygraphs ausrichten. Wahrscheinlich meinen Sie auch den Code für die ui.r anstelle von server.r – smoff