R语言 更改“闪亮”中的值

ny6fqffe  于 2023-02-17  发布在  其他
关注(0)|答案(1)|浏览(175)

我正在尝试在一个非常简单的应用程序中实现一个滑块。主要的想法是用滑块改变值,并在图表2中看到可视化的结果。下面你可以看到我的代码

---
title: "Test App"
output: 
  flexdashboard::flex_dashboard:
    orientation: columns
    vertical_layout: fill
runtime: shiny
---

```{r setup, include=FALSE}
library(flexdashboard)
library(shiny)
library(tidyverse)

# Data Set 1

df<-data.frame( cyl=c("4","6","8"),
                Multiplier=c(2,4,6))
                
# Data Set 2
df1 <- mtcars
df1$cyl <- as.factor(df1$cyl)

Column {.sidebar}


selectInput("clusterNum",
  label = h4("Charts"),
  choices = list("Chart1" = "Chart1", "Chart2" = "Chart2"),
  selected = "Chart1"
)


# Sidebar to demonstrate various slider options ----
sidebarPanel(

# Input: Simple integer interval ----
sliderInput("integer", "Integer:",
                  min = 0, max = 8,
                  value = 1),)

Column {data-width=650}

Chart


# First chart
Chart1 <- ggplot(df1, aes(x = wt, y = mpg)) +
  geom_point()

# Second chart
Chart2_df1<-df1%>%
  dplyr::left_join(df,df1,by = c("cyl"="cyl"))

Chart2_df1<-Chart2_df1%>%
  dplyr::mutate(mpg_new=(mpg*Multiplier))

Chart2 <- ggplot(Chart2_df1, aes(x = wt, y = mpg_new)) + geom_point()

# Visualization of the selected chart
renderPlot({
  switch(input$clusterNum,
    "Chart1" = Chart1,
    "Chart2" = Chart2
  )
})

使用滑块中的值,我想更改**df**中“乘数”列的值。更改后,这些值是第二个图表公式的一部分,用于乘以**df1**中“mpg”列的值。完成此操作后,下一步是在图表2中显示结果。
所以谁能帮我实现这个类似于下图?

![](https://i.stack.imgur.com/sjbZs.jpg)
watbbzwu

watbbzwu1#

为了使绘图对输入具有React性,我们需要它在reactive内或在renderPlot内处理(本质上是React性的)。
一种方法是将Chart2设为无功图,然后用Chart2()“调用”它(获取无功数据/图的方法):

# First chart
Chart1 <- ggplot(df1, aes(x = wt, y = mpg)) +
  geom_point()

# Second chart
Chart2 <- reactive({
  dplyr::left_join(df, df1, by = c("cyl" = "cyl")) %>%
    dplyr::mutate(mpg_new = (mpg * Multiplier * input$integer)) %>%
    ggplot(aes(x = wt, y = mpg_new)) +
    geom_point()
})

# Visualization of the selected chart
renderPlot({
  switch(input$clusterNum,
    "Chart1" = Chart1,
    "Chart2" = Chart2()
  )
})

注意,Chart1是未修改的,因为它不是一个React成分,我们继续将它称为Chart1(没有()),就像我们对待任何其他正则R对象一样。但是,因为Chart2是一个有光泽的React对象,我们需要()来获得更新后的值。
如果您除了绘制数据之外还要对此数据进行处理,则可以选择将更改后的数据作为一个无功分量,然后将其用于其他分量。

# Second chart data
Chart2_dat <- reactive({
  dplyr::left_join(df, df1, by = c("cyl" = "cyl")) %>%
    dplyr::mutate(mpg_new = (mpg * Multiplier * input$integer))
})

# Second chart
Chart2 <- reactive({
  Chart2_dat() %>%
    ggplot(aes(x = wt, y = mpg_new)) +
    geom_point()
})

# Visualization of the selected chart
renderPlot({
  switch(input$clusterNum,
    "Chart1" = Chart1,
    "Chart2" = Chart2()
  )
})

并且任何其它组件(例如,表格、附加绘图)也可使用X1 M9 N1 X来查看所联接/更新的数据。

相关问题