Shiny 是RStudio公司開發(fā)的R包塞栅,利用Shiny 可以輕松構(gòu)建交互式Web應(yīng)用程序(App)者铜。
在前面一個 Shiny app的基本組成部分解釋了構(gòu)建一個shiny app的兩個部分以及如何運(yùn)行。
- 一個用戶界面: ui.R
- 一個服務(wù)器功能: server.R
- 運(yùn)行:shinyApp(); runApp()
因此放椰,最簡單的shiny app如下:
- 可以在Rstudio中直接運(yùn)行
- 可以創(chuàng)建一個文件R程序:app.R作烟,然后再運(yùn)行
library(shiny)
# Define UI ----
ui <- fluidPage(
)
# Define server logic ----
server <- function(input, output) {
}
# Run the app ----
shinyApp(ui = ui, server = server)
運(yùn)行之后,生成的是一個空白的網(wǎng)頁砾医。
#布局
- fluidPage()可以創(chuàng)建流式布局,放置自定義的用戶功能界面拿撩。
使用fluidPage在ui.R種創(chuàng)建一個界面,有標(biāo)題欄和工具欄如蚜。工具欄包含一個側(cè)欄面板和一個主面板压恒。
library(shiny)
ui <- fluidPage(
titlePanel("title panel"),
sidebarLayout(
sidebarPanel("sidebar panel"),
mainPanel("main panel")
)
)
server <- function(input, output) {}
# Run the app ----
shinyApp(ui = ui, server = server)
titlePanel
和 sidebarLayout
是fluidPage種最常用的元素。
sidebarLayout 中最常用的功能:
- sidebarPanel
- mainPanel
這兩個功能可以放置用戶自定義內(nèi)容到側(cè)邊欄和主界面错邦。
側(cè)邊欄默認(rèn)出現(xiàn)在左邊探赫,但是也可以設(shè)置到右邊(sidebarLayout設(shè)置參數(shù)position = "right")。
ui <- fluidPage(
titlePanel("title panel"),
sidebarLayout(position = "right",
sidebarPanel("sidebar panel"),
mainPanel("main panel")
)
)
上面創(chuàng)建了一個基本Shiny app撬呢,也可以通過其他函數(shù)添加自定義內(nèi)容伦吠。navbarPage 可以設(shè)置導(dǎo)航欄添加多個多個交互界面』昀梗或者毛仪,可以使用fluidRow和column從grid系統(tǒng)構(gòu)建布局。了解Shiny app各種布局芯勘,查看文章Shiny Application Layout Guide潭千。
#HTML內(nèi)容
通過向*Panel中添加內(nèi)容來豐富Shiny app。在借尿,上面的例子中刨晴,使用sidebarPanel()函數(shù)向側(cè)邊欄添加標(biāo)題, mainPanel向主界面添加了標(biāo)題路翻。
添加文本內(nèi)容時狈癞,使用HTML 標(biāo)簽也是很方便和強(qiáng)大的。了解過HTML 的人都明白HTML 標(biāo)簽的作用與用法茂契。
shiny function | HTML5 equivalent | creates |
---|---|---|
p |
<p> |
段落 |
h1 |
<h1> |
一級標(biāo)題 |
h2 |
<h2> |
二級標(biāo)題 |
h3 |
<h3> |
三級標(biāo)題 |
h4 |
<h4> |
四級標(biāo)題 |
h5 |
<h5> |
五級標(biāo)題 |
h6 |
<h6> |
六級標(biāo)題 |
a |
<a> |
超鏈接 |
br |
<br> |
換行蝶桶;或者空行 |
div |
<div> |
分隔 |
span |
<span> |
一定范圍內(nèi)文本格式設(shè)置 |
pre |
<pre> |
文本預(yù)定義格式 |
code |
<code> |
代碼塊 |
img |
<img> |
圖片 |
strong |
<strong> |
加粗文本 |
em |
<em> |
強(qiáng)調(diào) |
HTML |
Directly passes a character string as HTML code |
#標(biāo)題
創(chuàng)建一個標(biāo)題,如下:
各級標(biāo)題都可以實(shí)現(xiàn)掉冶,h1()到h5()
> library(shiny)
> h1("My title")
<h1>My title</h1>
然后真竖,將創(chuàng)建的標(biāo)題傳遞給Shiny app:h1("My title")作為參數(shù)傳遞給titlePanel
, sidebarPanel
, 或 mainPanel
脐雪。
ui <- fluidPage(
titlePanel("My Shiny App"),
sidebarLayout(
sidebarPanel(),
mainPanel(
h1("First level title"),
h2("Second level title"),
h3("Third level title"),
h4("Fourth level title"),
h5("Fifth level title"),
h6("Sixth level title")
)
)
)
文本對齊方式也可以設(shè)置。例如恢共,居中战秋,h6("Episode IV", align = "center");HTML的所有標(biāo)簽都可以作為一個參數(shù)傳遞給Shiny的函數(shù)讨韭。
ui <- fluidPage(
titlePanel("My Star Wars App"),
sidebarLayout(
sidebarPanel(),
mainPanel(
h6("Episode IV", align = "center"),
h6("A NEW HOPE", align = "center"),
h5("It is a period of civil war.", align = "center"),
h4("Rebel spaceships, striking", align = "center"),
h3("from a hidden base, have won", align = "center"),
h2("their first victory against the", align = "center"),
h1("evil Galactic Empire.")
)
)
)
server <- function(input, output) {}
# Run the app ----
shinyApp(ui = ui, server = server)
#文本格式
Shiny提供了許多標(biāo)簽(tag function)用于格式化文本脂信。
ui <- fluidPage(
titlePanel("My Shiny App"),
sidebarLayout(
sidebarPanel(),
mainPanel(
p("p creates a paragraph of text."),
p("A new p() command starts a new paragraph. Supply a style attribute to change the format of the entire paragraph.", style = "font-family: 'times'; font-si16pt"),
strong("strong() makes bold text."),
em("em() creates italicized (i.e, emphasized) text."),
br(),
code("code displays your text similar to computer code"),
div("div creates segments of text with a similar style. This division of text is all blue because I passed the argument 'style = color:blue' to div", style = "color:blue"),
br(),
p("span does the same thing as div, but it works with",
span("groups of words", style = "color:blue"),
"that appear inside a paragraph.")
)
)
)
#圖片
圖片可以增強(qiáng)應(yīng)用程序的外觀,幫助用戶理解內(nèi)容透硝。img函數(shù)在應(yīng)用程序中放置圖片狰闪。
img(src = "my_image.png", height = 72, width = 72)
注:img會在特定位置尋找存放的圖片。在Shiny app目錄下一個名為www的文件夾濒生,這個目錄就是放置ui.R, server.R的位置埋泵。Shiny以一種特殊的方式處理www文件夾,Shiny會共享這個www下的文件給web使用的用戶罪治;所以秋泄,www文件夾一般存放圖片、樣式表和其他的應(yīng)用程序的web組件
ui <- fluidPage(
titlePanel("My Shiny App"),
sidebarLayout(
sidebarPanel(),
mainPanel(
img(src = "rstudio.png", height = 140, width = 400)
)
)
)
更多的tag functions可以參考:
#總結(jié)
-
fluidPage
,titlePanel
andsidebarLayout
創(chuàng)建用戶界面 - 在Shiny函數(shù)中使用HTML標(biāo)簽
- 使用HTML tag attributes(顏色之類的)作為一個參數(shù)窗體給Shiny函數(shù)
- 添加元素到
titlePanel
,sidebarPanel
或mainPanel
- 每個面板(panel)有多個元素時规阀,使用逗號隔開
- 添加圖片恒序,將圖片放置到www文件夾,使用img函數(shù)
#原文:
Shiny written-tutorial lesson2
Shiny Widgets Gallery
系列文章:
R shiny教程-1:一個 Shiny app的基本組成部分
R shiny教程-2:布局用戶界面
Shiny Server安裝