Shinyでは、「Bootstrap」というフロントエンドのデザインフレームワーク使用しています。
デザインフレームワークといってもCSS集のようなものです。
ShinyのデフォルトのUIは非常にシンプルなものですが、無料で出回っているBootstrapのテーマを使用することで簡単に見栄えをグレードアップすることができます。
さらに、無料のテーマでは物足りない方は、有償のテーマを購入することも可能です。
まずは、Shinyのデフォルトのデザインを見てみましょう。
以下は改造前のベースになるソースコードです。
これをいじってみます。
ui.R
library(shiny)
shinyUI(fluidPage(
# Application title
headerPanel("New Application"),
# Sidebar with a slider input for number of observations
sidebarPanel(
sliderInput("obs",
"Number of observations:",
min = 1,
max = 1000,
value = 500)
),
# Show a plot of the generated distribution
mainPanel(
plotOutput("distPlot")
)
))
server.R
library(shiny)
shinyServer(function(input, output) {
output$distPlot <- renderPlot({
# generate and plot an rnorm distribution with the requested
# number of observations
dist <- rnorm(input$obs)
hist(dist)
})
})
次にテーマの指定方法をみていきます。
テーマは、fluidPage()にパラメタ「theme」を設定するだけでOKです。
fluidPage()の書式
fluidPage(..., title = NULL, responsive = TRUE, theme = NULL)
さきほどのサンプルソースコードでは、「theme」は省略されています。
この場合は、「theme = NULL」と指定するのと同じです。
テーマの設定は、theme = “*******.css”のようにCSSファイルを指定するだけでOKです。
今回の例では、テーマ(CSSファイル)をダウンロードせず、URLで指定します。
無料のテーマをみてみましょう。今回は、Bootswatchというサイトから選んでみます。
これらのテーマの中から先頭になる「amelia」を試します。
ダウンロードボタンにマウスカーソルを合わせるとブラウザの下部にURLが表示されるので、これを
書き取ります。
http://bootswatch.com/amelia/bootstrap.min.css
さきほどのui.Rを書き換えます。
ui.R
library(shiny)
shinyUI(fluidPage(
# Application title
headerPanel("New Application"),
# Sidebar with a slider input for number of observations
sidebarPanel(
sliderInput("obs",
"Number of observations:",
min = 1,
max = 1000,
value = 500)
),
# Show a plot of the generated distribution
mainPanel(
plotOutput("distPlot")
),
theme = "http://bootswatch.com/amelia/bootstrap.min.css"
))
mainPanel()の後に、カンマで区切ってthemeを追加するだけです。
実行すると、UIがamelia風になります。
以上、ShinyでUIのテーマを変更する方法でした。
とても簡単でしたね。


