Side-by-Side Grobs 不适用于 Shiny
Side-by-Side Grobs Not Working with Shiny
我想创建一个 Shiny 文档,其中显示两个 grob 并排显示,并且希望每个 grob 中的文本是 sliderInput 的选定值。
我能够在非反应性上下文中轻松并排输出两个 grob(下面的第一个示例),但显然无法提取滑块值。但是,当我尝试在 renderPlot
反应上下文中输出它们时,我能够提取滑块值,但只有第二个 grob 出现并且连接箭头不可见。
谁能提供同时显示 grobs 和反应值的解决方案?
---
runtime: shiny
output:
html_document
---
```{r global-options, include = FALSE}
## set global options
knitr::opts_chunk$set(echo = F, error = F, warning = F, message = F)
```
```{r echo = F, error = F, warning = F, message = F}
## libraries
library(shiny)
library(Gmisc)
library(grid)
library(knitr)
## slider input
sliderInput("nSelect", "Select N:", min = 1, max = 10, value = 5)
```
```{r fig.width = 10, fig.height = 1}
## output grobs normally, but no way to use reactive slider values
g1 <- boxGrob(5,
x = 0.3,
y = 0.5)
g2 <- boxGrob(5,
x = 0.8,
y = 0.5)
g1
g2
connectGrob(g1, g2, type = "horizontal")
```
```{r fig.width = 10, fig.height = 1}
## output grobs using render plot (allows inputs)
renderPlot({
g3 <- boxGrob(input$nSelect,
x = 0.3,
y = 0.5)
g4 <- boxGrob(input$nSelect,
x = 0.8,
y = 0.5)
connectGrob(g3, g4, type = "horizontal")
g3
g4
})
```
在 renderPlot
中您需要显式调用 print()
,即您需要做的就是:
renderPlot({
g3 <- boxGrob(input$nSelect,
x = 0.3,
y = 0.5)
g4 <- boxGrob(input$nSelect,
x = 0.8,
y = 0.5)
print(connectGrob(g3, g4, type = "horizontal"))
print(g3)
print(g4)
})
这是一个 R 特性,其中表达式中的任何内容都不会打印,除非它是最后一个元素,即您可以省略 g4 的 print()
,因为它只会被打印为最后一个。
我想创建一个 Shiny 文档,其中显示两个 grob 并排显示,并且希望每个 grob 中的文本是 sliderInput 的选定值。
我能够在非反应性上下文中轻松并排输出两个 grob(下面的第一个示例),但显然无法提取滑块值。但是,当我尝试在 renderPlot
反应上下文中输出它们时,我能够提取滑块值,但只有第二个 grob 出现并且连接箭头不可见。
谁能提供同时显示 grobs 和反应值的解决方案?
---
runtime: shiny
output:
html_document
---
```{r global-options, include = FALSE}
## set global options
knitr::opts_chunk$set(echo = F, error = F, warning = F, message = F)
```
```{r echo = F, error = F, warning = F, message = F}
## libraries
library(shiny)
library(Gmisc)
library(grid)
library(knitr)
## slider input
sliderInput("nSelect", "Select N:", min = 1, max = 10, value = 5)
```
```{r fig.width = 10, fig.height = 1}
## output grobs normally, but no way to use reactive slider values
g1 <- boxGrob(5,
x = 0.3,
y = 0.5)
g2 <- boxGrob(5,
x = 0.8,
y = 0.5)
g1
g2
connectGrob(g1, g2, type = "horizontal")
```
```{r fig.width = 10, fig.height = 1}
## output grobs using render plot (allows inputs)
renderPlot({
g3 <- boxGrob(input$nSelect,
x = 0.3,
y = 0.5)
g4 <- boxGrob(input$nSelect,
x = 0.8,
y = 0.5)
connectGrob(g3, g4, type = "horizontal")
g3
g4
})
```
在 renderPlot
中您需要显式调用 print()
,即您需要做的就是:
renderPlot({
g3 <- boxGrob(input$nSelect,
x = 0.3,
y = 0.5)
g4 <- boxGrob(input$nSelect,
x = 0.8,
y = 0.5)
print(connectGrob(g3, g4, type = "horizontal"))
print(g3)
print(g4)
})
这是一个 R 特性,其中表达式中的任何内容都不会打印,除非它是最后一个元素,即您可以省略 g4 的 print()
,因为它只会被打印为最后一个。