【问题标题】:user defined tickmark labels in inputSlider in shiny输入滑块中的用户定义刻度标签闪亮
【发布时间】:2017-03-08 00:21:22
【问题描述】:
sliderInput("myslider", "Slider:", min=1, max=100, value=6)

返回一个在 1、11、21、31、...、91 和 100 处带有刻度标签的滑块。

我会喜欢确定这些刻度标签以返回更合理的值 1、10、20、30、...90、100 的启发式方法。

我想这会经常出现,因为从 1 到 100 的滑块很常见。 (如果您设置 min=0,它会显示所需的刻度标签,但在许多应用中,您不希望输入为 0。

目前,没有办法向sliderInput 提供用户定义的刻度线标签。是否有仅针对标签的解决方法?

here 发布了一个类似的问题,但它讨论的是创建用户定义的刻度线,而不是标签。

【问题讨论】:

  • 如果您设法更改刻度标签,则可以在 server 中解码它们
  • 很久以前我有一个不漂亮但有效的答案 - see here。我几乎可以肯定应该有更好的方法,这是我刚开始使用 Shiny 时写的
  • 实际上我链接到的答案与这个问题并不完全相同,但它可能会对你有所帮助
  • 不幸的是,在 Shiny 中没有简单的方法可以做到这一点,因为在底层库离子 Range Slider (github.com/IonDen/ion.rangeSlider) 中没有简单的方法可以做到这一点。在给定minmax 的情况下,刻度值(离子范围滑块术语中的“网格值”)始终由步长(例如:step: 500, grid: true, grid_snap: true)或所需刻度数确定参数(例如:最小值:0,最大值:10000,网格:true,grid_num:10`)。这就是您可以通过更改最小/最大值来更改网格值的原因。

标签: r shiny


【解决方案1】:

https://groups.google.com/forum/#!topic/shiny-discuss/AeAzR4p2h1g是这个问题的解决方案:

ui <- pageWithSidebar(
  headerPanel("Slider labels"),
  sidebarPanel(
    uiOutput("slider")
  ),
  mainPanel()
)

server <- function(input, output) {
  output$slider <- renderUI({

      args       <- list(inputId="foo", label="slider :", ticks=c(90,95,99,99.9), value=c(2,3))

      args$min   <- 1
      args$max   <- length(args$ticks)

      if (sessionInfo()$otherPkgs$shiny$Version>="0.11") {
        # this part works with shiny 1.5.0
        ticks <- paste0(args$ticks, collapse=',')
        args$ticks <- T
        html  <- do.call('sliderInput', args)

        html$children[[2]]$attribs[['data-values']] <- ticks;

      } else {
        html  <- do.call('sliderInput', args)    
      }

      html
    })

}

runApp(list(ui = ui, server = server))

【讨论】:

  • 转换为从 1 到 100 的滑块,这会给出一个带有刻度标记的滑块。
  • 澄清一下,我看不出我怎么能很好地标记标签和步长为 1。(但是,当你设置 ticks=seq 时,标记标签是一个很好的 0 到 100 (0,100,10)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-10
  • 2023-04-01
  • 1970-01-01
  • 2019-04-11
  • 2018-03-07
  • 1970-01-01
相关资源
最近更新 更多