Usando flexdashboard en R: cómo obtener una salida con un solo clic, dos clics para otra salida y tres clics para otra salida en un gráfico ggplot.
Tengo que hacer que el botón “Action” me proporcione 3 salidas:
- Todas las salidas serán puntos en el gráfico de ggplot.
- Cuando haga clic una vez, el punto estará en el punto (30,58) en mi gráfico de ggplot.
- Cuando haga clic dos veces, el punto estará en el punto (40,68) en mi gráfico de ggplot.
- Cuando haga clic tres veces, el punto estará en el punto (50,78) en mi gráfico de ggplot.
A continuación se muestra mi código:
title: “Untitled”
output:
flexdashboard::flex_dashboard:
orientation: columns
vertical_layout: fill
“`{r setup, include=FALSE}
library(flexdashboard)
library(shiny)
library(shinydashboard)
library(ggplot2)
library(mgcv)
dataset <- diamonds
<pre><code><br />Columna {data-width=150}
———————————————————————–
### Gráfico A
“`{r}
actionButton(“action”, “Acción”)
Columna {data-width=350}
Gráfico B
“`{r}
ggplot() +
geom_point(data = tibble(x = c(30,40,50),y = c(58,68,78)), aes(x =x, y = y))
<pre><code><br />### Gráfico C
“`{r}
reactive({
input$action
})
Como puedes ver, soy principiante. Solo necesito entender cómo vincular la idea de n-clics y n-salidas en flexdashboard / shiny.
¿Alguna ayuda?
davy.ai
Para lograr la funcionalidad deseada, puedes utilizar la función
observeEvent()
para monitorear el número de veces que se hace clic en el botón de acción y actualizar los datos para el ggplot en consecuencia. Aquí está el código modificado:“`{r}
title: “Sin título”
output:
flexdashboard::flex_dashboard:
orientation: columns
vertical_layout: fill
“`{r setup, include=FALSE}
library(flexdashboard)
library(shiny)
library(shinydashboard)
library(ggplot2)
library(mgcv)
dataset <- diamonds
Columna {data-width=350}
Gráfico B
“`{r}
plotdata <- tibble(x = c(30,40,50), y = c(58,68,78))
output$chart <- renderPlot({
ggplot(plotdata) +
geom_point(aes(x = x, y = y))
})
observeEvent(input$action, {
clickCount <- input$action
if(clickCount <= nrow(plotdata)) {
newData <- plotdata[1:clickCount, ]
} else {
newData <- plotdata
}
output$chart <- renderPlot({
ggplot(newData) +
geom_point(aes(x = x, y = y))
})
})
En este código, creamos un output llamado
chart
que se renderizará con los datos deplotdata
. Luego utilizamosobserveEvent()
para monitorear el valor deinput$action
(es decir, el número de veces que se hace clic en el botón). Si el valor es menor o igual al número de filas enplotdata
, seleccionamos un subconjunto deplotdata
que incluya solo las primerasclickCount
filas. De lo contrario, utilizamos el conjunto completo deplotdata
. Luego renderizamos elggplot
modificado con los nuevos datos.Finalmente, incluimos un
plotOutput()
que muestra elchart
. Esto mostrará el gráfico actualizado cada vez que se hace clic en el botón.