【发布时间】:2016-08-24 21:42:11
【问题描述】:
我对 Shiny 很陌生。
考虑以下几点:
ui.R:
library(shiny)
shinyUI(fluidPage(
titlePanel("The Linear Equation y = 0.1x"),
# Sidebar with a slider input for number of bins
sidebarLayout(
sidebarPanel(
sliderInput("x",
"X-value:",
min = 0,
max = 100,
value = 0,
step = 0.1)
),
# Show a plot of the generated distribution
mainPanel(
plotOutput("linPlot")
)
)
))
server.R:
library(shiny)
library(ggplot2)
shinyServer(function(input, output, session) {
f <- function(x){
0.1*x
}
output$linPlot <- renderPlot({
point_f <- data.frame(x = input$x,
y = f(input$x))
ggplot(NULL, aes(x = x)) +
stat_function(data = data.frame(x = c(0, 100)),
fun = f, geom = 'line', col = 'blue') +
geom_point(data = point_f, aes(x = x, y = y),
size = 4, col = 'blue')
})
session$onSessionEnded(function() { stopApp() })
})
我遇到的主要问题是滑块不允许选择 EACH 0.1。也就是说,当用户使用滑块时,会跳过各种值。我希望这个应用程序的用户会想要选择一个特定的十分之一作为值,而滑块无法选择精确的十分之一这一事实对于我的目的来说是不可接受的。
我认为这不是使用滑块的任何选项可以解决的问题,所以我还希望在侧边栏面板中添加一个文本框,其中包含以下内容:
- 文本框中的值可以用作输入来执行滑块的操作(因此滑块和文本输入中的值
input$x应该相同)。 - 随着滑块的移动,文本框会更改其值以匹配滑块的值。
- 随着文本框值的变化,滑块移动以匹配其文本框的值。
- 区间 [0, 100] 之外的值对于文本框来说是不可接受的,理想情况下会报错。
- 文本框的输入必须是数字,格式为 ab.c,其中 a、b 和 c 都是一位数。
理想情况下,如果滑块可以自己处理这个问题,那就太好了,但我没有找到任何表明它可以的东西。
我知道这涉及textInput,但我不确定如何超越这一步。
【问题讨论】:
-
您试图将 1000 个值 (100*0.1) 放入宽度小于 1000 像素的小部件中,这就是它跳过值的原因。如果您将滑块设置为浏览器的整个宽度,它可能会起作用,但它仍然非常繁琐。为什么不直接使用提供文本输入和向上/向下按钮的 NumericInput 小部件?
-
@Spacedman
numericInput像SpinBox一样闪亮,但它也需要手动限制范围(使用可以插入任何数值——超过增长按钮的限制) -
@Spacedman 我希望用户能够看到趋势如何随值变化(因此是滑块)并能够输入他们感兴趣的确切值(因此文本框)。