分享

「R shiny 基础」如何进行网页布局

 生物_医药_科研 2019-02-03

在第一篇「R shiny 基础」初识Shiny ,我们了解了Shiny应用主要分为两个部分,UI对象和 server函数,这一篇将会介绍如何进行网页布局。

准备

在开始之前,你需要创建一个文件夹,其中有一个 app.R文件,复制如下的内容到 app.R

  1. library(shiny)

  2. # 定义UI

  3. ui <> fluidPage(

  4. )

  5. # 定义服务端

  6. server <> function(input, output){

  7. }


  8. # 运行app

  9. shinyApp(ui = ui, server = server)

基本布局(Layout)

当你打开任何一个网页,每个网页的不同元素的摆放方式就是布局,例如我的简书主页

我们的目标是快速的构建一个凑合用的网页应用,而如果从头搭建,那么你需要学一堆HTML语法和CSS样式,基本上就把我们劝退了。好在Shiny提供了一系列高级函数,让我们“暂时”不用考虑底层的HTML和CSS。

HTML元素描述的是内容是什么,CSS用于描述内容应该怎么样。

先学初学者必须掌握的布局三板斧, fluidPage, titlePanelsidebarLayout,

  • fluidPage: 它的作用和其命名一致,就是创建一个流动布局的页面。

  • titlePanel: 标题栏

  • sidebarLayout: 常用的边栏布局,接受如下两个函数作为输入

  • sidebarPanel: 边栏

  • mainPanel: 主体部分

  1. ui <> fluidPage(

  2.  titlePanel('title Panel'),

  3.  sidebarLayout(

  4.    sidebarPanel('sidebar'),

  5.    mainPanel('main panler')


  6.  )

效果如下:

titlePanelsidebarLaytou创建了我们Shiny应用的基本布局,对于我们初学者基本就够用了。在我们有一定基础后,我们可以尝试用 fluidRowColumn手动搭建布局。

虽然结果不是特别好看,但请牢记当我们学习一个新事物的时候,不要想着完美,而是追求完成。只有完成了,你才能有资格谈完美。

HTML内容

在搭建好基本布局的前提下,我们可以在 *Panel函数中填充更多内容。比方说,出现在 siderbarPanel中的'siderbar',就是我们加入的文字内容。

从最终的HTML角度来看,sidebarLayout中是将网页分隔成4:8的两个部分,sidebarPanel是4, mainPanel是8。 且sidebarPanel输入的内容是都在HTML的 form 层级下

为了增加更多高级的内容,我们可以Shiny的HTML 标签函数(tag),等价于HTML5的标签(tag)。

shiny 函数等价的HTML5 标签结果
p
段落
h1
第一级标题
h2
第二级标题
h3
第三级标题
h4
第四级标题
h5
第五级标题r
h6
第六级标题
a
超链接
br
空白行
div
分隔文本
span
行内分割
pre
等宽文本
code
代码
img
图片
strong
加粗
em
强调
HTML
原生HTML代码

写个代码练习下

  1. ui <> fluidPage(

  2.  titlePanel('title Panel'),

  3.  sidebarLayout(

  4.    sidebarPanel(

  5.      tags$hgroup(h1('Side Bar'), h2('Panel'))


  6.    ),

  7.    mainPanel(

  8.      HTML('

    You can add content to your Shiny app by placing it inside a *Panel function. For example, the apps above display a character string in each of their panels. The words “sidebar panel” appear in the sidebar panel, because we added the string to the sidebarPanel function, e.g. sidebarPanel(\'sidebar panel\'). The same is true for the text in the title panel and the main panel.

    '),

  9.      div()

  10.    )

  11.  )

  12. )

格式化样式

上面只用了HTML的元素,如果我们希望标题能够居中,改变字体和颜色,那么就需要对HTML中元素的属性进行修改。

  1. ui <> fluidPage(

  2.  titlePanel('title Panel'),

  3.  sidebarLayout(

  4.    sidebarPanel(

  5.      h1('Side Bar Panel')


  6.    ),

  7.    mainPanel(

  8.      h1('First Header', align='center',

  9.        style ='font-family: 'times'; font-size: 32pt '),

  10.      h2('Second Header', align='center',

  11.         stype = 'font-family: 'arial'; font-size: 14pt'),

  12.      div(),

  13.      p('I fill blue', style = 'color:blue')

  14.    )

  15.  )

  16. )

关于元素的属性,可以在w3schools学习

图片和超链接

除了简单的文本以外,我们还可以在网页中增加图片,为文本增加超链接。图片的内容要放和 app.R同一级的 www文件夹下

  1. ui <> fluidPage(

  2.  titlePanel('title Panel'),

  3.  sidebarLayout(

  4.    sidebarPanel(

  5.      h1('Side Bar Panel')


  6.    ),

  7.    mainPanel(

  8.      h1('Hello Shiny', align='center',

  9.        style ='font-family: 'times'; font-size: 32pt '),

  10.      div(),

  11.      p('This images was download from', a(href='https://www.jianshu.com/p/e2495bbc7bd1', 'here' )),

  12.      img(src = '2013053-4dd190b5c709b535.png')

  13.    )

  14.  )

Shiny支持的Tags在如下两个链接中有介绍

  • http://shiny./articles/html-tags.html

  • http://shiny./articles/tag-glossary.html

小练习

请还原出如下的网页布局

其中Rstuio的图片下载地址为http://shiny./tutorial/written-tutorial/lesson2/www/rstudio.png

复习

经过这一篇的学习,我们现在能完成如下内容

  • 使用 fluidPagetitlePanel和 sidebarLayout创建用户界面

  • 使用Shiny的tag函数构建HTML元素

  • 为每个tag函数设置HTML属性

  • 通过往 titlePanelsidebarPanel 或 mainPanel传入元素填充网页

  • 在子布局中使用 ,分隔多个元素

  • 增加 www文件夹下的图片

到目前为止,我们只使用了HTML的基本元素构建用户界面,下一节将会学习在网页中增加一些小工具,例如下拉栏。

参考

  • http://shiny./tutorial/written-tutorial/lesson2/

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多