Markdown中的交互式ggplot

时间:2016-09-24 04:06:48

标签: r shiny markdown r-markdown

http://rmarkdown.rstudio.com/authoring_shiny.html上的示例表明renderPlot本身会将图表渲染到降价处。我们如何才能让我们的降价功能允许点击,画笔等交互,这些交互被声明为后续plotOutput步骤的一部分?

此处plotOutputshiny的{​​{1}}的互动示例 - http://shiny.rstudio.com/articles/plot-interaction.html

代码段 -

```{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%"

   )
})

```

1 个答案:

答案 0 :(得分:0)

问题在于您使用height中的参数plotOutput和百分比。我们可以在文档?shiny::plotOutput中找到:

  

注意,对于身高,使用" auto"或" 100%"通常不会按预期工作,因为使用HTML / CSS计算高度。

如果删除height = 100%(在这种情况下是多余的),则会渲染绘图。如果要更改输出的高度,可以使用像素而不是百分比。

然后,您可以通过input$Click1input$DblClick1input$Brush1访问值,并将其传递给渲染*函数。

示例:

---
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)
})
```