在 R Shiny 的表中插入 ggplot barplot

Posted

技术标签:

【中文标题】在 R Shiny 的表中插入 ggplot barplot【英文标题】:insert ggplot barplot in table in R Shiny 【发布时间】:2021-02-04 09:16:41 【问题描述】:

我希望重新创建一个像这样的表格,在其中将 ggplot 图插入到单元格中。我想使用 reactable 来生成我的表格。

关于如何进行的任何建议? 我想也许我可以使用 ggsave() 将绘图保存在 png 中。但是我不知道要插入到表中。

我们将不胜感激。谢谢。

【问题讨论】:

【参考方案1】:

我自己也有同样的问题,我发现的方法是创建一个htmlwidget,其中包含ggplot。请记住,您可以在可反应单元格中包含任何 HTML 小部件,这就是使用迷你图时实际发生的情况。所以你可以尝试这样的事情:

library(reactable)
library(ggplot2)
library(plotly)
library(dplyr)

data <- iris
#create a fake data with placeholders
data2 <-  data %>% group_by(Species) %>% summarise(Sepal.Length = unique(Species),
                                                   Sepal.Width = unique(Species),
                                                   Petal.Length = unique(Species),
                                                   Petal.Width = unique(Species))

reactable(data2, columns = list(
  Sepal.Length = colDef(cell = function(value)
    subDB <- data[data$Species==value,]
    p<-ggplotly(
      ggplot(subDB, aes(x=Sepal.Length))+geom_density() + xlab("")
    )
    return(p)
  ),
  Sepal.Width = colDef(cell = function(value)
    subDB <- data[data$Species==value,]
    p<-ggplotly(
      ggplot(subDB, aes(x=Sepal.Width))+geom_density() + xlab("")
    )
    return(p)
  ), 
  Petal.Length = colDef(cell = function(value)
    subDB <- data[data$Species==value,]
    p<-ggplotly(
      ggplot(subDB, aes(x=Petal.Length))+geom_density()+ xlab("")
    )
    return(p)
  ),
  Petal.Width = colDef(cell = function(value)
    subDB <- data[data$Species==value,]
    p<-ggplotly(
      ggplot(subDB, aes(x=Petal.Width))+geom_density()+ xlab("")
    )
    return(p)
  )
))

注意:正如@L Smeets 所问,因为所有这些都是小部件变量,所以高度和宽度是可变的,即它们会随着窗口而调整。但是,如果您愿意,我们可以通过控制可反应或 ggplotly 来控制整个表格的高度和宽度。设置 ggplotly 小部件的高度和宽度:

  Petal.Width = colDef(cell = function(value)
    subDB <- data[data$Species==value,]
    p<-ggplotly(
      ggplot(subDB, aes(x=Petal.Width))+geom_density()+ xlab(""),
      height = 100
    )
    return(p)
  )

【讨论】:

使用这种方法时有没有办法控制单元格高度?【参考方案2】:

所以我认为我没有看到有人将ggplots 放入单元格中以获取reactable。下面的屏幕截图取自reactable examples。看来您可能必须定义一个 HTML 小部件或使用 sparkline 包提供的小部件。

很遗憾,我对 html 小部件的了解还不够,因此无法提供更多帮助。

【讨论】:

感谢您的帮助。不幸的是,它不处理水平条(或者我不知道如何处理)

以上是关于在 R Shiny 的表中插入 ggplot barplot的主要内容,如果未能解决你的问题,请参考以下文章

R Shiny 服务器未呈现正确的 ggplot 字体系列

将 ggplot 与 r-shiny 一起使用时出错

为啥这个简单的 R Shiny 输出不使用 ggplot 绘图?

R shiny ggplot - 如何不让年份标签超出网格?

使用和不使用 ggplot 的交互式 R Shiny 绘图

R语言将ggplot2对象转化为plotly对象并通过shiny将可视化结果在应用程序或者网页中显示出来