• 主页
  • 课程

    关于课程

    • 课程归档
    • 成为一名讲师
    • 讲师信息
    教学以及管理操作教程

    教学以及管理操作教程

    ¥1,000.00 ¥100.00
    阅读更多
  • 特色
    • 展示
    • 关于我们
    • 问答
  • 事件
  • 个性化
  • 博客
  • 联系
  • 站点资源
    有任何问题吗?
    (00) 123 456 789
    weinfoadmin@weinformatics.cn
    注册登录
    恒诺新知
    • 主页
    • 课程

      关于课程

      • 课程归档
      • 成为一名讲师
      • 讲师信息
      教学以及管理操作教程

      教学以及管理操作教程

      ¥1,000.00 ¥100.00
      阅读更多
    • 特色
      • 展示
      • 关于我们
      • 问答
    • 事件
    • 个性化
    • 博客
    • 联系
    • 站点资源

      生信星球

      • 首页
      • 博客
      • 生信星球
      • R包shiny开发网页–7.文字、表格与图像的输出

      R包shiny开发网页–7.文字、表格与图像的输出

      • 发布者 weinfoeditor
      • 分类 生信星球
      • 日期 2018年10月5日
      测试开头

      今天是生信星球陪你的第148天


         你想找辆共享单车,发现满街都是别家车,没有一辆你能骑。

         你想学点生信,搜了“初学者教程”,满眼尽是高大上,没有一句能看懂。

         终于你跨越茫茫宇宙,来到生信星球,发现了初学者的新大陆!

      小洁写于2018.9.23 也不知道哪里跑偏了,我怎么觉得一直在学UI,那server呢,咋整。只有脸蛋米有内涵,那不行不行。
      续写于2018.10.5 时间过得太快,中间去学了一下autodock,断断续续就过了这么多天,在家也要好好学习!(虽然懒猪基因就自然的特异性表达了)
      今天系统学习一下输出的东西是怎么得到的。

      我的学习路线:shiny自带了11个示例,直接输入即可得到示例网页和对应的代码,真是方便的很!然后把代码复制过来贴到脚本窗口,在脚本加上shinyApp(ui,server)即可。然后仔细研究这些代码和网页上的元素对应,找出其中的共性和个性。
      这里是官方给出的11个示例。

      install.packages("shiny")
      library(shiny)
      runExample("01_hello")      # a histogram
      runExample("02_text")       # tables and data frames
      runExample("03_reactivity") # a reactive expression
      runExample("04_mpg")        # global variables
      runExample("05_sliders")    # slider bars
      runExample("06_tabsets")    # tabbed panels
      runExample("07_widgets")    # help text and submit buttons
      runExample("08_html")       # Shiny app built from HTML
      runExample("09_upload")     # file upload wizard
      runExample("10_download")   # file download wizard
      runExample("11_timer")      # an automated timer

      观察了一下这些示例,都是应用了侧边栏布局。而且大多是侧边栏用作输入,主题部分用于输出。

      1.文本输出:输入什么就输出什么

      R包shiny开发网页--7.文字、表格与图像的输出


      (不过我发现木有换行的操作啊。可能是对html不够熟悉吧以后再看)


      library(shiny)

      library(shinydashboard)

      header <- dashboardHeader(title="Reactivity")

      sidebar <- dashboardSidebar(
        textInput(inputId = "caption",label = "Caption:")
      )
      body <- dashboardBody(h3(textOutput("caption")))

      ui <- dashboardPage(header, sidebar, body)

      server <- function(input, output) {
        output$caption <- renderText({
          input$caption
        })
      }
      shinyApp(ui, server)

      这段代码是从例3中抽出来的。然后我出于对shinydashboard的喜爱和强迫症,对源代码进行了一些不疼不痒的改写,直接runExample(“03_reactivity”) 可以查看臃肿的源代码奥。

      理了一下这里的逻辑:

      • 输入变量和输出变量都叫caption。

      • 输出,在ui中体现为textOutput(“caption”),在server中则体现为output$caption。

      • 在ui中规定要显示出某个输出变量,而server则规定要怎么生成这个输出变量。

      • renderText是渲染文本的意思,渲染的意思大概就是改变一下格式,美化一下显示效果,markdown就是渲染用的。

      2.数据框输出

      可以选择一个数据框显示出来,选项有3个。另外可以通过滑动选择显示的行数。

      R包shiny开发网页--7.文字、表格与图像的输出
      滑块被挡住了
      library(shiny)
      library(shinydashboard)
      header <- dashboardHeader(title="doodle look at me")
      sidebar <- dashboardSidebar(
        selectInput(inputId = "dataset",
                    label = "Choose a dataset:",
                    choices = c("rock", "pressure", "cars")),
        sliderInput("obs","rows:",1,50,20)
      )
      body <- dashboardBody(tableOutput("view"))
      ui <- dashboardPage(header, sidebar, body,skin = "green")
      server <- function(input, output) {
        datasetInput <- reactive({
          switch(input$dataset,
                 "rock" = rock,
                 "pressure" = pressure,
                 "cars" = cars)
        })
        output$view <- renderTable({
          head(datasetInput(), n = input$obs)
        })
      }
      shinyApp(ui = ui, server = server)

      理思路:

      • 输入变量:dataset和obs,分别代表数据框名和行数。

      • 输出变量:view,表示输出的表格。

      • 用到了reactive和swich关联了标签与数据框

      • renderTable渲染表格

      • head选择显示数据框前多少行,行数等于输入变量obs。

      3.图像输出

      (1)提取数据框中的变量作图(plot)

      以mpg数据框中的displ为横坐标,选择cty与hwy中的一列为纵坐标作图。

      library(shiny)
      library(shinydashboard)
      library(ggplot2)
      header <- dashboardHeader(title = "doodle,look at me")
      sidebar <- dashboardSidebar(
        selectInput("column","col:",c("cty","hwy"))
      )
      body <- dashboardBody(
        textOutput("caption"),
        plotOutput("x"))
      ui <- dashboardPage(header, sidebar, body)

      server <- function(input, output){
        columnInput <- reactive({
          switch(input$column,
                 "cty" = mpg$cty,
                 "hwy" = mpg$hwy)
        })
        output$caption=renderText(paste("displ-",input$column,sep = ""))
        output$x <- renderPlot({
          plot(mpg$displ,columnInput())
        })

      }

      shinyApp(ui, server)

      在上面的代码中,关键在于switch实现了标签和列名之间的对应关系,把这个经后台转换过的输入变量又转为一个新的变量作为作图的纵轴变量。

      (2)在shiny种实现ggplot作图

      作图用的是系统自带的plot,我想实现用ggplot2作图,进行了一系列的探索,发现如果y轴变量是可变的话(也就是照搬上面代码的模式),图片是出不来的!苦苦探索,百改皆错,终于在一个博客中发现了“aes_string”这个神奇的操作!在此启发下写出了以下代码:

      ①选择指定的列做散点图
      library(shiny)
      library(shinydashboard)
      library(ggplot2)
      header <- dashboardHeader(title = textOutput("caption"))
      sidebar <- dashboardSidebar(
        selectInput("X","col:",colnames(mpg)),
        selectInput("Y","col:",colnames(mpg))
      )
      body <- dashboardBody(
        plotOutput("plot"))
      ui <- dashboardPage(header, sidebar, body)

      server <- function(input, output){

        output$caption=renderText(paste(input$X,"-",input$Y,sep = ""))

        output$plot <- renderPlot({
          ggplot(mpg,aes_string(x=input$X,y=input$Y))+geom_point()
        })
      }

      shinyApp(ui, server)
      R包shiny开发网页--7.文字、表格与图像的输出

      ②选择指定的列并指定颜色和是否添加趋势线

      library(shiny)
      library(ggplot2)
      dataset <- mpg
      library(shinydashboard)
      header <- dashboardHeader(title = "mpg")
      sidebar <- dashboardSidebar(
        selectInput('x', 'X', colnames(dataset)),
        selectInput('y', 'Y', colnames(dataset)),
        selectInput('color', 'Color', c('None', names(dataset))),
        checkboxInput('smooth', 'Smooth')
      )
      body <- dashboardBody(plotOutput('plot'))
      ui <- dashboardPage(header, sidebar, body)

      server <- function(input, output) {
        output$plot <- reactivePlot(function() {
          p <- ggplot(dataset, aes_string(x=input$x, y=input$y)) + geom_point() 
          if (input$color != 'None')
            p <- p + 
              aes_string(color=input$color) + 
              theme(legend.position="top")
          if (input$smooth)
            p <- p + 
              geom_smooth() + 
              theme(legend.position="top")
          print(p)
        }, height=400)
      }
      shinyApp(ui,server)
      R包shiny开发网页--7.文字、表格与图像的输出

      友情链接:

      生信工程师入门最佳指南
      学徒培养

      隔壁生信技能树公益视频合辑(学习顺序是linux,r,软件安装,geo,小技巧,ngs组学!)

      国内看B站,教学视频链接:https://m.bilibili.com/space/338686099 
      国外看YouTube,教学视频链接:https://m.youtube.com/channel/UC67sImqK7V8tSWHMG8azIVA/playlists 


      点击底部的“阅读原文”,获得更好的阅读体验哦😻

      初学生信,很荣幸带你迈出第一步。

      我们是生信星球,一个不拽术语、通俗易懂的生信知识平台。由于是2018年新号,竟然没有留言功能。需要帮助或提出意见请后台留言、联系微信或发送邮件到Bioplanet520@outlook.com,每一条都会看到的哦~

      R包shiny开发网页--7.文字、表格与图像的输出


      测试结尾

      请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!

      • 分享:
      作者头像
      weinfoeditor

      上一篇文章

      【Book】用R轻松实现机器学习
      2018年10月5日

      下一篇文章

      【DS】R中用线性回归进行预测建模
      2018年10月6日

      你可能也喜欢

      8-1651673488
      生信零基础入门学习小组长期报名中(2022仍继续)
      7 4月, 2022
      2-1651673738
      简化版的ROC曲线
      21 2月, 2022
      8-1651674718
      支持向量机模型
      19 11月, 2021

      搜索

      分类

      • R语言
      • TCGA数据挖掘
      • 单细胞RNA-seq测序
      • 在线会议直播预告与回放
      • 数据分析那些事儿分类
      • 未分类
      • 生信星球
      • 老俊俊的生信笔记

      投稿培训

      免费

      alphafold2培训

      免费

      群晖配置培训

      免费

      最新博文

      Nature | 单细胞技术揭示衰老细胞与肌肉再生
      301月2023
      lncRNA和miRNA生信分析系列讲座免费视频课和课件资源包,干货满满
      301月2023
      如何快速批量修改 Git 提交记录中的用户信息
      261月2023
      logo-eduma-the-best-lms-wordpress-theme

      (00) 123 456 789

      weinfoadmin@weinformatics.cn

      恒诺新知

      • 关于我们
      • 博客
      • 联系
      • 成为一名讲师

      链接

      • 课程
      • 事件
      • 展示
      • 问答

      支持

      • 文档
      • 论坛
      • 语言包
      • 发行状态

      推荐

      • iHub汉语代码托管
      • iLAB耗材管理
      • WooCommerce
      • 丁香园论坛

      weinformatics 即 恒诺新知。ICP备案号:粤ICP备19129767号

      • 关于我们
      • 博客
      • 联系
      • 成为一名讲师

      要成为一名讲师吗?

      加入数以千计的演讲者获得100%课时费!

      现在开始

      用你的站点账户登录

      忘记密码?

      还不是会员? 现在注册

      注册新帐户

      已经拥有注册账户? 现在登录

      close
      会员购买 你还没有登录,请先登录
      • ¥99 VIP-1个月
      • ¥199 VIP-半年
      • ¥299 VIP-1年
      在线支付 激活码

      立即支付
      支付宝
      微信支付
      请使用 支付宝 或 微信 扫码支付
      登录
      注册|忘记密码?