R shiny教程-2:布局用戶界面

R shiny

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)
Sidebar on the left

titlePanelsidebarLayout是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")
  )
)
Sidebar on the right

上面創(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")
    )
  )
)
App with headers

文本對齊方式也可以設(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.")
    )
  )
)
Formatting options

#圖片

圖片可以增強(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)
    )
  )
)
Image in an app

更多的tag functions可以參考:

#總結(jié)

  • fluidPage, titlePanel and sidebarLayout創(chuàng)建用戶界面
  • 在Shiny函數(shù)中使用HTML標(biāo)簽
  • 使用HTML tag attributes(顏色之類的)作為一個參數(shù)窗體給Shiny函數(shù)
  • 添加元素到 titlePanel, sidebarPanelmainPanel
  • 每個面板(panel)有多個元素時规阀,使用逗號隔開
  • 添加圖片恒序,將圖片放置到www文件夾,使用img函數(shù)

#原文:

Shiny written-tutorial lesson2
Shiny Widgets Gallery

系列文章:
R shiny教程-1:一個 Shiny app的基本組成部分
R shiny教程-2:布局用戶界面
Shiny Server安裝

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谁撼,一起剝皮案震驚了整個濱河市歧胁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌厉碟,老刑警劉巖喊巍,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異箍鼓,居然都是意外死亡崭参,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門款咖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來何暮,“玉大人,你說我怎么就攤上這事铐殃『M荩” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵富腊,是天一觀的道長坏逢。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么是整? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任肖揣,我火速辦了婚禮,結(jié)果婚禮上浮入,老公的妹妹穿的比我還像新娘龙优。我一直安慰自己,他們只是感情好舵盈,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著球化,像睡著了一般秽晚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上筒愚,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天赴蝇,我揣著相機(jī)與錄音,去河邊找鬼巢掺。 笑死句伶,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的陆淀。 我是一名探鬼主播考余,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼轧苫!你這毒婦竟也來了楚堤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤含懊,失蹤者是張志新(化名)和其女友劉穎身冬,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體岔乔,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡酥筝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了雏门。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嘿歌。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖茁影,靈堂內(nèi)的尸體忽然破棺而出搅幅,到底是詐尸還是另有隱情,我是刑警寧澤呼胚,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布茄唐,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏沪编。R本人自食惡果不足惜呼盆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蚁廓。 院中可真熱鬧访圃,春花似錦、人聲如沸相嵌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饭宾。三九已至批糟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間看铆,已是汗流浹背徽鼎。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留弹惦,地道東北人否淤。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像棠隐,于是被迫代替她去往敵國和親石抡。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345