我花了最后半小时阅读了有关conditionalPanel,actionButtons以及每次按下按钮时它们的值增加1的方法。话虽如此,以下是我在下面尝试做的以及我面临的问题:
问题 我正在使用conditionalPanel在两个不同的renderPlots之间切换。我使用两个不同的renderPlots而不是同一个renderPlot中的两个图的原因是因为两个图具有不同的高度/宽度尺寸是很重要的。我在conditionalPanel中使用actionButton的值,这是很糟糕的。
我想要什么 我希望move.chart显示如果togglemovement actionButton最近按下了2个按钮。如果toggleshotchart最近被按下,我希望显示shot.chart。
我希望我能做什么 如果我只能在条件中使用plotData $值,我会全部设置。 plotData $ value用于输入renderPlots中的if语句以确定应绘制哪些绘图,但我不能在conditionalPanel中使用它们。
所有这些都说,这是我的项目的缩短版本。
library(shiny)
# 2. UI layout
# ============
ui <- fluidPage(
fluidRow(
column(width = 4, align = 'center',
actionButton(inputId = 'toggleshotchart', label = 'Launch Shots'),
actionButton(inputId = 'togglemovement', label = 'Launch Movements')
),
# This displays either the shot or movement chart
# ===============================================
column(width = 8, align = 'left',
conditionalPanel("input.togglemovement > input.toggleshotchart",
plotOutput('movement.chart', height = 650, width = 1128)
),
conditionalPanel("input.togglemovement <= input.toggleshotchart",
plotOutput('shot.chart', height = 846, width = 900)
)
)
)
)
# 3. Server Layout
# ================
server <- shinyServer(function(input, output) {
# Create some reactive stuff to toggle charts
plotData <- reactiveValues(value = NULL)
observeEvent(input$toggleshotchart, {
plotData$value <- 0
})
observeEvent(input$togglemovement, {
plotData$value <- 1
})
# create the first chart
output$shot.chart <- renderPlot({
# this chart is displayed at launch
if (is.null(plotData$value)) {
plot(c(1,2,3,4,5), c(1,2,3,4,5))
}
# this chart SHOULD BE displayed after clicking toggleshotchart
else if(plotData$value == 0) {
hist(rnorm(10))
}
# Do nothing (prev displayed motion chart here)
else {
# do nothing
}
})
# this chart SHOULD BE displayed after clicking togglemovementchart
output$movement.chart <- renderPlot({
if(plotData$value == 1) {
hist(c(1,2,3,2,1))
}
})
})
shinyApp(ui = ui, server = server)
我读了很多关于重置actionButton的值,但找不到任何可以解决我的问题的东西。似乎将actionButton值重置为0并不容易/无法完成。在我的这个任务中,任何想法都会受到高度赞赏!
编辑 - 之前我问过这个相关的问题 - In RShiny, change plot width / height for separate plots within same renderPlot() - 解决方案的工作原理,但问题略有不同。我越是处理这个问题,就越发现我最初的问题没有解决我的实际问题。答案 0 :(得分:2)
如何使用.bigLabel {
font-size: 48px;
}
在两个地块之间切换?
radioButtons
我也尝试使用library(shiny)
# 2. UI layout
# ============
ui <- fluidPage(
fluidRow(
column(width = 4,
radioButtons("choice_plot","Launch",choices=list("Shots","Movements"), selected="Shots")),
# This displays either the shot or movement chart
# ===============================================
column(width = 8, align = 'left', uiOutput("plot_ui"))
)
)
# 3. Server Layout
# ================
server <- shinyServer(function(input, output) {
output$plot_ui <- renderUI({
if(input$choice_plot == 'Shots') {
plot.width = 1128
plot.height = 650
}else{
plot.width = 900
plot.height = 846
}
plotOutput('plot', width = plot.width, height = plot.height)
})
output$plot <- renderPlot({
if(input$choice_plot == 'Shots'){
hist(rnorm(10))
}else{
hist(c(1,2,3,2,1))
}
})
})
shinyApp(ui = ui, server = server)
:
actionButton