这是我的代码
我用appendTab()创建面板的想法是让用户创建图表,然后单击按钮运行某种模型
这个想法几乎是doen,但我注意到,当我回到第一个面板的图表的颜色是相同的最后一个图表。
这里我有一个GIF,显示当我回到前一个面板时,颜色始终保持最后一个颜色(黄色)。
为什么?为什么?
的数据
library(shiny)
library(dplyr)
library(stringr)
library(ggplot2)
colors_hex <- c("#FF0000", "#00FF00", "#0000FF", "#FFFF00", "#FF00FF")
data <- gapminder::gapminder %>% filter(country == 'Italy')
# Adiciona ruído aleatório aos valores da coluna 'pop'
desvio_maximo = 0.05 # Ajuste conforme necessário para controlar o desvio máximo
noise <- rnorm(n = nrow(data), mean = 0, sd = desvio_maximo * mean(data$pop))
pop_com_ruido <- data$pop + noise
ui <- fluidPage(
navbarPage(
"Rodando Modelos Econométricos com seus dados...",
id = "tabs"
),
actionButton("add_tab", "Adicione um Painel"),
tableOutput("head"),
uiOutput("tabs_content")
)
server <- function(input, output, session) {
observeEvent(input$add_tab, {
tab_name <- paste("Gráfico e Regressão Modelo ", input$add_tab)
appendTab(
inputId = "tabs",
tabPanel(tab_name,
actionButton(inputId = str_remove_all(paste0(tab_name,'criar')," "),
paste0("Crie o Gráfico")),
actionButton(inputId = str_remove_all(paste0(tab_name,'mod')," "),
paste0("Rode a ",tab_name)),
plotOutput(paste0("plot",input$add_tab))
),
select = TRUE
)
observeEvent(
input[[str_remove_all(paste0(tab_name,'criar')," ")]],{
output[[paste0("plot",input$add_tab)]] <- renderPlot({
p <- ggplot(data = data,aes(x = year, y = pop)) + geom_line( color = colors_hex[input$add_tab])
p
}
)
})
observeEvent(
input[[str_remove_all(paste0(tab_name,'mod')," ")]],{
output[[paste0("plot",input$add_tab)]] <- renderPlot({
ggplot(data = data,aes(x = year, y = pop)) +
geom_line(color = colors_hex[input$add_tab])+
geom_line(aes(x = year, pop_com_ruido),color = 'black',size = 4)
}
)
})
})
}
shinyApp(ui, server)
字符串
1条答案
按热度按时间ve7v8dk21#
问题是你使用
input$add_tab
作为所有的颜色值。由于这是一个React值,每次该值改变时它都会被重新计算。它的当前值不与图本身一起存储。为了防止它是React的,你想隔离当前值。你可以这样做字符串
我们用
new_index <- isolate(input$add_tab)
捕获当前值,然后在创建其他React对象时使用该值。