新的闪亮。我正在为一些实验数据创建数据探索应用程序。
我首先选择一个变量为子集,然后使用滑块选择所述变量的范围(如图所示)。子集化数据以红色覆盖在原始图上。
我希望sliderInput
与selectInput
处于同一级别。最好的方法是什么?我还想为这些变量添加一个复选框或单选按钮,如果选中它会添加辅助绘图(或辅助轴 - 我知道,不推荐,但这是所需的)。我还没有实现它,但把它放在这里,因为那将需要相同的对齐。
CODE
sliderInput
和selectInput
的论点已被删除,以简洁起见。 zdat()
是一个被动的data.table
。
UI
fluidRow(
column(4,
uiOutput("subsetZoomPlot_x"), # Select x-axis for SortZoomPlot
uiOutput("subsetZoomPlot_y"), # Select y-axis for SortZoomPlot
uiOutput("subsetZoomPlot_var1"), # Subset data by var1
uiOutput("subsetZoomPlot_var2"), # Subset data by var2
uiOutput("subsetZoomPlot_var3") # Subset zoomplot data by var3
),
column(4,
uiOutput("subsetZoomPlot_var1_slider"), # range for subsetZoomPlot_var1 (slider input)
uiOutput("subsetZoomPlot_var2_slider"), # range for subsetZoomPlot_var1 (slider input)
uiOutput("subsetZoomPlot_var3_slider") # range for subsetZoomPlot_var1 (slider input)
)
),
fluidRow(
plotOutput("subsetZoomPlot")
)
SERVER 的
output$subsetZoomPlot_x <- renderUI({
selectInput(inputId = "subsetZoomPlot_x", ...)
})
output$subsetZoomPlot_y <- renderUI({
selectInput(inputId = "subsetZoomPlot_y", ...)
})
output$subsetZoomPlot_var1 <- renderUI({
selectInput(inputId = "subsetZoomPlot_var1", ...)
})
output$subsetZoomPlot_var2 <- renderUI({
selectInput(inputId = "subsetZoomPlot_var2", ...)
})
output$subsetZoomPlot_var3 <- renderUI({
selectInput(inputId = "subsetZoomPlot_var3", ...)
})
output$subsetZoomPlot_var1_slider <- renderUI({
vmin <- floor(min(zdat()[, get(input$subsetZoomPlot_var1)]))
vmax <- ceiling(max(zdat()[, get(input$subsetZoomPlot_var1)]))
sliderInput(...)
})
output$subsetZoomPlot_var2_slider <- renderUI({
vmin <- floor(min(zdat()[, get(input$subsetZoomPlot_var2)]))
vmax <- ceiling(max(zdat()[, get(input$subsetZoomPlot_var2)]))
sliderInput(...)
})
output$subsetZoomPlot_var3_slider <- renderUI({
vmin <- floor(min(zdat()[, get(input$subsetZoomPlot_var3)]))
vmax <- ceiling(max(zdat()[, get(input$subsetZoomPlot_var3)]))
sliderInput(...)
})
编辑:
我添加了UI部分的当前代码。它已经有fluidrow(column(), column())
的布局。我的问题是,我希望var1
(屏幕截图中为rh
)的滑块与选择rh
的下拉列表对齐(selectInput
)并且其他两个变量也一样。这意味着第二列需要垂直移位。对于fluidrow
和selectInput
的每个组合,使用多个sliderInput
语句是唯一的方法吗?
答案 0 :(得分:0)
所有布局问题都需要在闪亮的应用代码的UI部分中解决。
从我可以看出,您的问题中包含的代码看起来像是在服务器部分,因为您的应用中似乎有动态输入。
这是一些简单的UI代码,用于将选择输入与滑块输入对齐
library(shiny)
ui <- fluidPage(title = 'Example',
fixedRow(
column(width = 2,
selectInput('input1_choice', 'Select Plot variable 1',
choices = letters[11:20])),
column(width = 2,
sliderInput('input1_val', 'Select Variable 1 Value',
0, 10, 5)
)
),
fixedRow(
column(width = 2,
selectInput('input2_choice', 'Select Plot variable 2',
choices = letters[1:10])
),
column(width = 2,
sliderInput('input2_val', 'Select Varaible 2 Value',
0, 10, 5)
)
)
)
shinyApp(ui, server = function(input, output) { })
因此每个fixedRow调用在UI中创建一行,而fixedRow调用中的每个列调用都会在该行中创建一个列以填充UI对象。
当您更改UI对象的类型时,该行的高度可以更改,但不会重叠或渗入此处演示的另一行:
library(shiny)
ui <- fluidPage(title = 'Example',
fixedRow(
column(width = 2,
selectInput('input1_choice', 'Select Plot Variable 1',
choices = letters[11:20])),
column(width = 2,
radioButtons('input1_val', 'Select Variable 1 Value',
choices = LETTERS[11:20])
)
),
fixedRow(
column(width = 2,
selectInput('input2_choice', 'Select Plot Variable 2',
choices = letters[1:10])
)
),
fixedRow(
column(width = 2,
selectInput('input3_choice', 'Select Plot Variable 3',
choices = letters[1:10])
),
column(width = 2,
sliderInput('input3_val', 'Select Variable 3 Value',
0, 10, 5)
)
)
)
shinyApp(ui, server = function(input, output) { })
这些示例与您需要的唯一区别是用uiOutput调用替换我所做的显式UI对象调用(例如selectInput)。
就像有些评论说那里有文件。我发现https://shiny.rstudio.com/reference/shiny/latest/特别有用。
答案 1 :(得分:0)
不确定它是最佳解决方案,但您可以在UI中使用列:
fluidRow(
column(4,selectInput("select_x", "Select X Axis", ...)),
column(8),
column(4,selectInput("select_y", "Select Y Axis", ...)),
column(8)
column(4, selectInput("subsetZoomPlot_var1", ...)),
column(4, sliderInput(...)),
column(4),
column(4, selectInput("subsetZoomPlot_var2", ...)),
column(4, sliderInput(...)),
column(4),
...
)