You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R Shiny中实现表格与绘图的水平对齐?

在Shiny中实现gt表格与ggplot的水平对齐

最常用且灵活的方法是利用Shiny内置的fluidRow()和column()函数构建流式布局,让表格和绘图分栏水平排列。以下是完整的可运行示例:

library(shiny)
library(ggplot2)
library(gt)

ui <- fluidPage(
  titlePanel("水平布局示例:gt表格 + ggplot"),
  # 用fluidRow作为容器,内部嵌套两个column实现水平排列
  fluidRow(
    # 第一列放置gt表格,宽度分配6份(总宽度为12份,因此各占一半)
    column(width = 6,
           gt_output("my_gt_table")
    ),
    # 第二列放置ggplot绘图
    column(width = 6,
           plotOutput("my_ggplot")
    )
  )
)

server <- function(input, output) {
  # 渲染gt表格
  output$my_gt_table <- render_gt({
    mtcars %>%
      head(10) %>%
      gt() %>%
      tab_header(title = "前10行mtcars数据")
  })
  
  # 渲染ggplot图形
  output$my_ggplot <- renderPlot({
    ggplot(mtcars, aes(x = hp, y = mpg, color = factor(cyl))) +
      geom_point(size = 3) +
      labs(title = "马力 vs 油耗", color = "气缸数") +
      theme_minimal()
  })
}

shinyApp(ui, server)

关键说明:

  • 布局逻辑:fluidRow()是响应式布局容器,内部的column()宽度总和为12,你可以根据需求调整两个列的宽度比例(比如表格占4份、绘图占8份,只需将width参数改为4和8)。
  • 输出配对:gt表格必须使用gt_output()(UI端)和render_gt()(Server端)配对,ggplot则用plotOutput()和renderPlot()配对,这是Shiny输出不同类型内容的标准方式。
  • 响应式适配:这种布局在小屏幕设备上会自动切换为垂直排列,保证移动端的可用性。

如果需要更紧凑的固定比例布局,也可以使用splitLayout(),示例如下:

ui <- fluidPage(
  titlePanel("固定比例水平布局"),
  splitLayout(
    cellWidths = c("50%", "50%"),
    gt_output("my_gt_table"),
    plotOutput("my_ggplot")
  )
)

不过fluidRow()+column()的响应式特性更适合大多数场景。

内容的提问来源于stack exchange,提问作者mzkrc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 15:57:23