Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adding a company Logo to ShinyDashboard header

So just curious, is there any way to add a company logo to the header of a ShinyDashboard? As I am looking at the documentation, it describes changing the "logo" in the CSS, this is just configuring what goes in the upper left hand corner though as far as I can tell and I would like to keep my title there.

I am not using the drop down menus and so I would like to add my company logo on the top right where the red box is.

enter image description here

Does anyone have any idea how this can be done with Shinydashboard? Thanks.

Update 2020-10-27

For users that are comfortable with HTML or want more flexibility around their user interface and have access to a front end developer, I recently discovered you can use HTML to build the entire user interface. There is a Shiny article about it here. This would allow the entire branding and layout to be done in a way that could comply with your company standards if desired. Hope this helps.

like image 467
decal Avatar asked Jul 15 '15 20:07

decal


People also ask

What is shinydashboardPlus?

Introduction. {shinydashboardPlus} relies on the same basis as {shinydashboard} , that is the AdminLTE HTML template. It provides extra elements that will help you to develop Shiny apps with a more professional look and feel.


2 Answers

I've been working with a bit of a hack for this, (and I know you didn't ask for it, but here's a clickable logo while we're at it):

library(shiny) library(shinydashboard)  dbHeader <- dashboardHeader() dbHeader$children[[2]]$children <-  tags$a(href='http://mycompanyishere.com',                                            tags$img(src='logo.png',height='60',width='200'))  dashboardPage(        dbHeader,        dashboardSidebar(),        dashboardBody() ) 

So this nests a shiny.tag inside the header. The second slot in this particular shiny object is the logo slot (You'll need a 'logo.png' in your /www/ folder in the app directory)

EDIT:

I just checked, and as of right now, this hack should no longer be necessary, you can insert the html directly from the dashboardHeader function via the title= parameter, (Before, that parameter was enforcing text only),

I think the answer might still be useful as a method to modify existing shiny functions where things ARE hardcoded in though.

Here's the method now:

dashboardPage(     dashboardHeader(title = tags$a(href='http://mycompanyishere.com',                                     tags$img(src='logo.png'))) 

or, adding a little more magic to the logo (I also use my logo as a loading bar):

# Takes a location 'href', an image location 'src', a loading gif 'loadingsrc' # height, width and alt text, and produces a loading logo that activates while # Shiny is busy loadingLogo <- function(href, src, loadingsrc, height = NULL, width = NULL, alt = NULL) {   tagList(     tags$head(       tags$script(         "setInterval(function(){                      if ($('html').attr('class')=='shiny-busy') {                      $('div.busy').show();                      $('div.notbusy').hide();                      } else {                      $('div.busy').hide();                      $('div.notbusy').show();            }          },100)")   ),   tags$a(href=href,          div(class = "busy",                img(src=loadingsrc,height = height, width = width, alt = alt)),          div(class = 'notbusy',              img(src = src, height = height, width = width, alt = alt))    )   ) }  dashboardBody(   dashboardHeader(title = loadingLogo('http://mycompanyishere.com',                                       'logo.png',                                       'loader.gif'),   dashboardSidebar(),   dashboardBody() ) 
like image 134
Shape Avatar answered Sep 19 '22 15:09

Shape


Here's my hack (put your logo, as has been mentioned before, into a www subdirectory of your app directory).
Because dashboardHeader() expects a tag element of type li and class dropdown, we can pass such elements instead of dropdownMenus:

library(shiny) library(shinydashboard)  dbHeader <- dashboardHeader(title = "My Dashboard",                             tags$li(a(href = 'http://shinyapps.company.com',                                       icon("power-off"),                                       title = "Back to Apps Home"),                                     class = "dropdown"),                             tags$li(a(href = 'http://www.company.com',                                       img(src = 'company_logo.png',                                           title = "Company Home", height = "30px"),                                       style = "padding-top:10px; padding-bottom:10px;"),                                     class = "dropdown"))  server <- function(input, output) {}  shinyApp(     ui = dashboardPage(         dbHeader,         dashboardSidebar(),         dashboardBody()     ),     server = server ) 
like image 37
Matt Flor Avatar answered Sep 17 '22 15:09

Matt Flor