如何在有光泽的材料应用程序中有条件地为代码着色

时间:2018-06-13 17:39:35

标签: r shiny

我遇到了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))),

Image that shows a red icon

现在要确定应该显示的颜色,我已经在服务器端创建了这个代码:

    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)

任何建议都将不胜感激。

0 个答案:

没有答案