闪亮的 Ui - 多次参考同一个情节

Posted

技术标签:

【中文标题】闪亮的 Ui - 多次参考同一个情节【英文标题】:shiny Ui - refer to same plot multiple times 【发布时间】:2021-04-16 16:26:03 【问题描述】:

我构建了一个闪亮的应用程序,最终应该可以支持多种语言。

因此,在我的 UI 中,我想多次引用相同的图。

但是,我似乎只能参考 outplut$plot 一次 - 如果我多次这样做,则看不到任何绘图。

所以我的问题是:如何从 UI 中多次引用同一个图?

请在下面找到一个最低限度的工作示例。如果我在 UI 中注释掉“plot2”,它就可以工作。如果我不这样做,两个情节都会消失。

来自柏林的祝福(:


library(shiny)
library(ggplot2)
library(plotly)

y <- c(1:30)
x <- c(1:30)
data <- as.data.frame(cbind(y, x))

plot <- renderPlotly(
    ggplotly(
        ggplot(data, aes(x=x, y=y)) +
            geom_point() 
    )
)

# Define UI for application that draws a histogram
ui <- fluidPage(
    "plot1", 
                       plotlyOutput("plot", width = "100%"), 
    # "plot2",
    #                    plotlyOutput("plot", width = "100%")

               
)

# Define server logic required to draw a histogram
server <- function(input, output) 

    output$plot <- renderPlotly(
        ggplotly(
            ggplot(data, aes(x=x, y=y)) +
                geom_point()
        )
    )
    


# Run the application 
shinyApp(ui = ui, server = server)


【问题讨论】:

【参考方案1】:

我相信您不能两次使用相同的输出,因为这些图在 html 中将具有相同的 ID。此外,还不清楚为什么您需要针对您的特定问题这样做,您是否需要显示相同的图两次?

否则,您可以尝试将“语言相关”逻辑添加到服务器端,也许?例如

output$plot <- renderPlotly(
    if (current_language() == 'English') 
        ...
     else 
        ... 
    
)

作为一种解决方法,您可以尝试将绘图保存到一个对象,例如

plot <- ggplotly(
            ggplot(data, aes(x=x, y=y)) +
                geom_point()
) 

然后用它来创建两个输出(虽然名称不同)

【讨论】:

bonsoir claude & merci pour ton avis (: @why?我基本上复制了应用程序四次,并为四种语言中的每一种创建了面板。你知道最聪明的方法吗?你的头?@replication 这就是我的想法,感谢您的确认 哦,我以为用户选择了整个应用程序的语言,但似乎你一次显示了所有元素。我的意思是,你可以在一个循环中创建所有元素或其他东西......但如果应用程序不是很大,我会像你一样复制所需的输出。 不,我只是使用了 navbarPage 和四个不同的 navbarMenus .. 偶然发现了 shiny.i18n,然后考虑实现它..

以上是关于闪亮的 Ui - 多次参考同一个情节的主要内容,如果未能解决你的问题,请参考以下文章

带情节的闪亮仪表板

基于情节数量的闪亮情节区域

如何在框内添加文本,并在 R 闪亮中绘制情节?

r闪亮ui中for循环内的逗号

在智能手机上使用,闪亮的交互式情节无法理解手指动作

闪亮的两个情节和串扰问题