我遇到了shinymaterial包,它创建了看起来不错的应用程序,实现起来非常简单。我正在将应用程序从shinydashboard转换为shinymaterial。
但是,shinydashboard不包含内置选项来创建一个像shinydashboard一样的infoBox。
通过一些搜索,我在GitHub上发现了这个帖子,它很容易创建类似的价值框!
我能够复制此代码以添加所需的颜色。但是,我遇到问题的方法是如何根据值有条件地更改图标的颜色。
我目前正在做的事情似乎应该有效。
这里是用于为ui中的图标指定特定(非动态)颜色的代码:
material_column(width=4, material_card(
material_row(icon("ambulance","fa-2x"), tags$style(".fa-
ambulance{color:#ff0000}"), "LTI Rate", hr()), h3(textOutput("LTIRate")),
depth=5))),
现在要确定应该显示的颜色,我已经在服务器端创建了这个代码:
output$OSHAColor <- renderText({
LTI_Rate <- inj_dmg_stn %>%
filter(Location == input$STATION) %>%
select(`LTI Rate`)
LTI_Target <- inj_dmg_stn %>%
filter(Location == input$STATION) %>%
select(`LTI Target`)
ifelse(LTI_Rate <= LTI_Target, sprintf('".fa-medkit
{color:%s}"','#228B22'),
sprintf('".fa-medkit {color:%s}"','#FF00000'))
})
为了测试这是什么输出,我使用以下代码在ui中显示了三种方式:
material_row(paste(textOutput("OSHAColor")),
HTML(paste(textOutput("OSHAColor"))), textOutput("OSHAColor"))
第一个输出为HTML字符串,这不是我想要的。我想要传递给闪亮的$ tag的闪亮标签字符串所需的第二个和第三个输出:
Image that shows what the app displays for the OSHAColor output 3 ways
当我尝试使用标签$ style中的这两个选项中的任何一个时,我的图标就像这样:
tags$style(HTML(paste(textOutput("OSHAColor"))))
我得到一个黑色图标,而不是红色或绿色,这意味着无法识别颜色或标签$ style参数。
我认为这post可能会对我有所帮助,但我尝试过并且我不确定我是否可以在服务器端创建整个图标。
最后,这是一个可重复的例子:
library(shiny)
library(shinymaterial)
## shinymaterial infobox reference site
## https://github.com/ericrayanderson/shinymaterial/issues/31
data <- as.data.frame(1.0)
colnames(data) <- c('Rate')
ui <- material_page(
title = "Reproducible Example",
material_card(
title = tags$b("INJURIES"),
material_row(
material_column(width=4,
material_card(material_row(icon("medkit","fa-2x"),
tags$styleHTML(paste(textOutput("Color")))), "Rate", hr()),
h3(textOutput("ARate")), depth=5)),
material_column(width=4,
material_card(material_row(icon("ambulance","fa-2x"), tags$style(".fa-
ambulance {color:#ff0000}"), "Rate", hr()), h3(textOutput("Rate")),
depth=5))),
material_row(paste(textOutput("Color")),
HTML(paste(textOutput("Color"))))
)
)
server <- function(input, output) {
## Rate ##
output$Rate <- renderText({as.character(sprintf("%.2f",round(
data[1,1]
,2))
)})
## Color ##
output$Color <- renderText({
ifelse(data[1,1] <= 4.0, as.character(sprintf('".fa-medkit
{color:%s}"','#228B22')), as.character(sprintf('".fa-medkit
{color:%s}"','#FF00000')))
})
}
shinyApp(ui = ui, server = server)
任何建议都将不胜感激。