R Shiny 中的自定义值框被压缩,它们之间有大的空白
custom valueboxes in R Shiny are compressed with large white spaces in between them
我正在尝试在 R Shiny 中制作自定义值框。我发现了如何更改背景的颜色,但有些东西使我的值框变得粗短并在它们之间留下很大的间隙。我想理想地在一条线上显示 3,但即使宽度为 4,它们看起来也被压扁了。我怎样才能让他们有更多的红色,中间只有一小段白色。
下面是一个可重现的示例和屏幕截图。
library(shinydashboard)
library(shiny)
library(dplyr)
red_box_format <- ".inner , p , h3 { background-color: red};"
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
textInput(inputId = "greeting",
label = "Say hi!"),
actionButton(inputId = "submit",
label = "Submit")
),
mainPanel(
tags$style(red_box_format),
column(4,align="center",div(valueBoxOutput("total_perfect"), style= "color: #FFFFFF")),
column(4,align="center",div(valueBoxOutput("total_fails"), style= "color: #FFFFFF"))
)
))
server <- function(input, output) {
data <- tibble(name = c("Justin", "Corey", "Sibley"),
grade = c(50, 100, 100))
output$total_perfect <- renderValueBox({
shiny::req(input$greeting)
shiny::req(input$submit)
if(input$greeting == "hi!") {
num_100s <- data %>% filter(grade == 100) %>% nrow()
valueBox(value = num_100s, subtitle = "Number of Perfect Scores")
}
})
output$total_fails <- renderValueBox({
shiny::req(input$greeting)
shiny::req(input$submit)
if(input$greeting == "hi!") {
num_50s <- data %>% filter(grade == 50) %>% nrow()
valueBox(value = num_50s, subtitle = "Number of Failures")
}
})
}
shinyApp(ui, server)
将输出插入fluidRow
;它们将更好地放置在引导程序网格中:
mainPanel(
fluidRow(
tags$style(red_box_format),
valueBoxOutput("total_perfect"),
valueBoxOutput("total_fails")
))
然后,您必须在 server
:
中像这样渲染它们
valueBox(value = tags$p(num_100s, style = "text-align:center;color: #FFFFFF;"),
subtitle = tags$p("Number of Perfect Scores", style = "text-align:center;color: #FFFFFF;"))
如果这有用,我扩展了上面的答案以允许对每个单独的框进行颜色编码,包括如果您愿意,如何将多种颜色合并到一个值框中。 (屏幕截图、代码和下面的 explanation/tips [特别是如果你是 CSS 的新手,就像我一样])。
截图
代码
library(shinydashboard)
library(shiny)
library(dplyr)
navy_inner_box <- "#total_fails .inner{ background-color: navy};"
yellow_inner_box <- "#total_perfect .inner , p , h3 { background-color: yellow};"
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
textInput(inputId = "greeting",
label = "Say hi!"),
actionButton(inputId = "submit",
label = "Submit")
),
mainPanel(
fluidRow(
tags$style(yellow_inner_box),
tags$style(navy_inner_box),
valueBoxOutput("total_perfect"),
valueBoxOutput("total_fails")
))
))
server <- function(input, output) {
data <- tibble(name = c("Justin", "Corey", "Sibley"),
grade = c(50, 100, 100))
output$total_perfect <- renderValueBox({
shiny::req(input$greeting)
shiny::req(input$submit)
if(input$greeting == "hi!") {
num_100s <- data %>% filter(grade == 100) %>% nrow()
valueBox(value = tags$p(num_100s, style = "text-align:center;color: #FFFFFF; background-color: red"),
subtitle = tags$p("Number of Perfect Scores", style = "text-align:center;color: #FFFFFF; background-color: red")) }
})
output$total_fails <- renderValueBox({
shiny::req(input$greeting)
shiny::req(input$submit)
if(input$greeting == "hi!") {
num_50s <- data %>% filter(grade == 50) %>% nrow()
valueBox(value = tags$p(num_50s, style = "text-align:center;color: #FFFFFF; background-color: navy"),
subtitle = tags$p("Number of Total Failures", style = "text-align:center;color: #FFFFFF; background-color: navy"))}
})
}
shinyApp(ui, server)
Explanation/Tips
作为 CSS 的新手,我不明白为什么当我指定背景颜色参数时,这些框要么不改变颜色,要么只改变其中的一部分。值框分为 3 个部分:值(我的屏幕截图中的 2 和 1)、字幕和内部部分(没有文本的地方)。每一个都有自己的背景,所以如果你想让每个盒子都有不同的颜色,你需要通过它们的名字来指定每个盒子的颜色(注意CSS name of #total_fails in the navy_inner_box) 对应输出名称,output$total_fails.
其他背景颜色在服务器中分别包装值和字幕的调用中指定。
如果不是通过免费 Google Chrome 扩展 CSS Selector,我不会发现这些盒子的内部名称。如果您是 CSS 的新手并且这些标签对您来说没有直观意义,我强烈建议您检查一下。
我正在尝试在 R Shiny 中制作自定义值框。我发现了如何更改背景的颜色,但有些东西使我的值框变得粗短并在它们之间留下很大的间隙。我想理想地在一条线上显示 3,但即使宽度为 4,它们看起来也被压扁了。我怎样才能让他们有更多的红色,中间只有一小段白色。
下面是一个可重现的示例和屏幕截图。
library(shinydashboard)
library(shiny)
library(dplyr)
red_box_format <- ".inner , p , h3 { background-color: red};"
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
textInput(inputId = "greeting",
label = "Say hi!"),
actionButton(inputId = "submit",
label = "Submit")
),
mainPanel(
tags$style(red_box_format),
column(4,align="center",div(valueBoxOutput("total_perfect"), style= "color: #FFFFFF")),
column(4,align="center",div(valueBoxOutput("total_fails"), style= "color: #FFFFFF"))
)
))
server <- function(input, output) {
data <- tibble(name = c("Justin", "Corey", "Sibley"),
grade = c(50, 100, 100))
output$total_perfect <- renderValueBox({
shiny::req(input$greeting)
shiny::req(input$submit)
if(input$greeting == "hi!") {
num_100s <- data %>% filter(grade == 100) %>% nrow()
valueBox(value = num_100s, subtitle = "Number of Perfect Scores")
}
})
output$total_fails <- renderValueBox({
shiny::req(input$greeting)
shiny::req(input$submit)
if(input$greeting == "hi!") {
num_50s <- data %>% filter(grade == 50) %>% nrow()
valueBox(value = num_50s, subtitle = "Number of Failures")
}
})
}
shinyApp(ui, server)
将输出插入fluidRow
;它们将更好地放置在引导程序网格中:
mainPanel(
fluidRow(
tags$style(red_box_format),
valueBoxOutput("total_perfect"),
valueBoxOutput("total_fails")
))
然后,您必须在 server
:
valueBox(value = tags$p(num_100s, style = "text-align:center;color: #FFFFFF;"),
subtitle = tags$p("Number of Perfect Scores", style = "text-align:center;color: #FFFFFF;"))
如果这有用,我扩展了上面的答案以允许对每个单独的框进行颜色编码,包括如果您愿意,如何将多种颜色合并到一个值框中。 (屏幕截图、代码和下面的 explanation/tips [特别是如果你是 CSS 的新手,就像我一样])。
截图
代码
library(shinydashboard)
library(shiny)
library(dplyr)
navy_inner_box <- "#total_fails .inner{ background-color: navy};"
yellow_inner_box <- "#total_perfect .inner , p , h3 { background-color: yellow};"
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
textInput(inputId = "greeting",
label = "Say hi!"),
actionButton(inputId = "submit",
label = "Submit")
),
mainPanel(
fluidRow(
tags$style(yellow_inner_box),
tags$style(navy_inner_box),
valueBoxOutput("total_perfect"),
valueBoxOutput("total_fails")
))
))
server <- function(input, output) {
data <- tibble(name = c("Justin", "Corey", "Sibley"),
grade = c(50, 100, 100))
output$total_perfect <- renderValueBox({
shiny::req(input$greeting)
shiny::req(input$submit)
if(input$greeting == "hi!") {
num_100s <- data %>% filter(grade == 100) %>% nrow()
valueBox(value = tags$p(num_100s, style = "text-align:center;color: #FFFFFF; background-color: red"),
subtitle = tags$p("Number of Perfect Scores", style = "text-align:center;color: #FFFFFF; background-color: red")) }
})
output$total_fails <- renderValueBox({
shiny::req(input$greeting)
shiny::req(input$submit)
if(input$greeting == "hi!") {
num_50s <- data %>% filter(grade == 50) %>% nrow()
valueBox(value = tags$p(num_50s, style = "text-align:center;color: #FFFFFF; background-color: navy"),
subtitle = tags$p("Number of Total Failures", style = "text-align:center;color: #FFFFFF; background-color: navy"))}
})
}
shinyApp(ui, server)
Explanation/Tips
作为 CSS 的新手,我不明白为什么当我指定背景颜色参数时,这些框要么不改变颜色,要么只改变其中的一部分。值框分为 3 个部分:值(我的屏幕截图中的 2 和 1)、字幕和内部部分(没有文本的地方)。每一个都有自己的背景,所以如果你想让每个盒子都有不同的颜色,你需要通过它们的名字来指定每个盒子的颜色(注意CSS name of #total_fails in the navy_inner_box) 对应输出名称,output$total_fails.
其他背景颜色在服务器中分别包装值和字幕的调用中指定。
如果不是通过免费 Google Chrome 扩展 CSS Selector,我不会发现这些盒子的内部名称。如果您是 CSS 的新手并且这些标签对您来说没有直观意义,我强烈建议您检查一下。