2016-09-24 5 views
2

Die Beispiele auf http://rmarkdown.rstudio.com/authoring_shiny.html zeigen an, dass renderPlot selbst das Diagramm zum Abschlag darstellt. Wie können wir unseren Abschlag erhalten, um Interaktionen wie Klicks, Pinsel usw. zuzulassen, die als Teil des nachfolgenden Schritts plotOutput deklariert sind?Interaktive ggplot in Markdown

Interaktivität Beispiele mit plotOutput in shiny hier - http://shiny.rstudio.com/articles/plot-interaction.html.

-Code-Schnipsel -

```{r, echo = FALSE} 

output[['Plot1']] = renderPlot(

    ggplot(mtcars) + geom_point(aes(x = cyl, y = qsec)) 

) 

renderPlot(

    ggplot(mtcars) + geom_point(aes(x = cyl, y = wt)) 

) 


print("renderPlot above. plotOutput below (which doesn't get rendered).") 

renderUI({ 
    plotOutput(
     'Plot1', 
     brush = brushOpts(
     id = 'Brush1' 
    ), 
     dblclick = dblclickOpts(id = 'DblClick1'), 
     click = 'Click1', 
     height = "100%" 

    ) 
}) 

``` 

Antwort

0

Das Problem ist, dass Sie den Parameter height in plotOutput mit Prozenten verwenden. Wir können in der Dokumentation ?shiny::plotOutput:

anzumerken, dass für die Höhe, „auto“ oder „100%“ mit im Allgemeinen nicht wie erwartet funktionieren, weil, wie Höhe mit HTML/CSS berechnet wird.

Wenn Sie height = 100% entfernen, was in diesem Fall redundant ist, wird das Plot gerendert. Wenn Sie die Höhe der Ausgabe ändern möchten, können Sie Pixel anstelle von Prozent verwenden.

Dann können Sie Werte über input$Click1, input$DblClick1 und input$Brush1 zugreifen und sie zu render * -Funktionen übergeben.


Beispiel:

--- 
title: "Example" 
author: "Unnamed_User" 
date: "24 Sep 2016" 
output: html_document 
runtime: shiny 
--- 

```{r, echo = FALSE} 
library(ggplot2) 
``` 

### Normal plot 

```{r, echo = FALSE} 
ggplot(mtcars) + geom_point(aes(x = cyl, y = wt)) 
``` 


### Interactive plot 

```{r, echo = FALSE} 
renderUI({ 
    plotOutput(
     'Plot1', 
     brush = brushOpts(
     id = 'Brush1' 
    ), 
     dblclick = dblclickOpts(id = 'DblClick1'), 
     click = 'Click1' 
    ) 
}) 

output[['Plot1']] <- renderPlot({ 
    ggplot(mtcars) + geom_point(aes(x = cyl, y = qsec)) 
}) 
``` 

### Clicked point 

```{r, echo = FALSE} 
renderPrint({ 
    cat(" x:", input$Click1$x, 
     "\n", 
     "y:", input$Click1$y) 
}) 
```