2015-04-17 8 views
5

Ich verwende Shiny zusammen mit RMarkdown, um ein interaktives Dokument zu erstellen, wie beschrieben here.So steuern Sie die Höhe/Größe der Zeichnung im interaktiven RMarkdown (mit Shiny)

Verwendung des folgenden Codes konnte ich

```{r, echo=FALSE, warning=FALSE, message=FALSE} 

g2g14 <- readOGR("input//geodata", "g2g14") # no projection needs to be specified 
old_geodata <- [email protected] 

inputPanel(
    selectInput("map.party", label = "Partei", choices = unique(long_data$Partei), selected = "FDP"), 
    selectInput("map.year", label = "Wahljahr", choices = unique(format.Date(long_data$Jahr, "%Y")), selected = "1971") 
) 

renderPlot({ 
    partydata <- long_data %>% 
    filter(Partei == input$map.party & Jahr == as.Date(input$map.year, "%Y")) 
    [email protected] <- old_geodata 
    [email protected] <- merge([email protected], partydata, by.x = "GMDNR",by.y ="BFSNr") 

    cols <- brewer.pal(5, "Purples") 
    brks <- seq(0,100,20) 
    colsForMap <- cols[findInterval([email protected]$Staerke, vec = brks[1:5])] 

    plot(g2g14, col = colsForMap, border = "white") 
    legend("topleft", legend = levels(cut([email protected]$Staerke, brks)), fill = cols, border = "white", title = "Parteistärke in %") 

}) 

Das Problem eine interaktive Karte zeichnen: Die Karte skaliert ist schön, wenn Sie den Code aus der Konsole ausgeführt wird, aber in dem interaktiven Dokument, das Grundstück zu klein :

enter image description here

Dies resultiert wahrscheinlich aus der begrenzten Höhe der Plotten Region. Ich habe bereits versucht, eine wirklich große in den Chunk-Optionen, aber ohne Ergebnis. Was tun?

Antwort

2

Sie können einfach width und height Optionen in renderPlot hinzufügen. Geben Sie ?renderPlot für weitere Informationen ein.

In Ihrem Fall

renderPlot({ 
    partydata <- long_data %>% 
    filter(Partei == input$map.party & Jahr == as.Date(input$map.year, "%Y")) 
    [email protected] <- old_geodata 
    [email protected] <- merge([email protected], partydata, by.x = "GMDNR",by.y ="BFSNr") 

    cols <- brewer.pal(5, "Purples") 
    brks <- seq(0,100,20) 
    colsForMap <- cols[findInterval([email protected]$Staerke, vec = brks[1:5])] 

    plot(g2g14, col = colsForMap, border = "white") 
    legend("topleft", legend = levels(cut([email protected]$Staerke, brks)), fill = cols, border = "white", title = "Parteistärke in %") 
}, width = 1200, height = 900) ## <--- add outside the curly braces 
3

Sie können dies mit einem einzigen zusätzlichen Schritt - fügen Sie ein renderUI:

```{r, echo=FALSE, warning=FALSE, message=FALSE} 

g2g14 <- readOGR("input//geodata", "g2g14") # no projection needs to be specified 
old_geodata <- [email protected] 

inputPanel(
    selectInput("map.party", label = "Partei", choices = unique(long_data$Partei), selected = "FDP"), 
    selectInput("map.year", label = "Wahljahr", choices = unique(format.Date(long_data$Jahr, "%Y")), selected = "1971") 
) 

output$unsized <- renderPlot({ 
    partydata <- long_data %>% 
    filter(Partei == input$map.party & Jahr == as.Date(input$map.year, "%Y")) 
    [email protected] <- old_geodata 
    [email protected] <- merge([email protected], partydata, by.x = "GMDNR",by.y ="BFSNr") 

    cols <- brewer.pal(5, "Purples") 
    brks <- seq(0,100,20) 
    colsForMap <- cols[findInterval([email protected]$Staerke, vec = brks[1:5])] 

    plot(g2g14, col = colsForMap, border = "white") 
    legend("topleft", legend = levels(cut([email protected]$Staerke, brks)), fill = cols, border = "white", title = "Parteistärke in %") 

}) 

renderUI({ 
    plotOutput("unsized", height = 500, width = 500) 
}) 
``` 

mit dem Beispieldokument getestet, die erstellt wird, wenn Sie einen neuen RMD-glänzend doc starten:

```{r, echo=FALSE} 
inputPanel(
    selectInput("n_breaks", label = "Number of bins:", 
       choices = c(10, 20, 35, 50), selected = 20), 

    sliderInput("bw_adjust", label = "Bandwidth adjustment:", 
       min = 0.2, max = 2, value = 1, step = 0.2) 
) 

output$unsized <- renderPlot({ 
    hist(faithful$eruptions, probability = TRUE, breaks = as.numeric(input$n_breaks), 
     xlab = "Duration (minutes)", main = "Geyser eruption duration") 

    dens <- density(faithful$eruptions, adjust = input$bw_adjust) 
    lines(dens, col = "blue") 
}) 

renderUI({ 
    plotOutput("unsized", height = 250, width = 250) 
}) 

``` 
+0

Diese Lösung funktioniert auch mit plotlyOutput(). – FacyMacFacyFace

Verwandte Themen