在 R Shiny 的 table 中插入 ggplot barplot

insert ggplot barplot in table in R Shiny

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

对如何进行有什么建议吗? 我想也许我可以使用 ggsave() 以 png 格式保存绘图。我不知道但是要插入一个 table.

如有任何帮助,我们将不胜感激。谢谢。

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

不幸的是,我对 html 小部件的了解还不够多,无法提供更多帮助。

我自己也有同样的问题,我找到的方法是创建一个htmlwidget,里面有ggplot。请记住,您可以在 reactable 单元格中包含任何 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 所问,因为所有这些都是小部件变量,所以高度和宽度是可变的,即它们随 window 调整。但是我们可以控制它,如果你想要并且有固定的高度和宽度,通过控制 reactable 或 ggplotly 来控制整个 table。设置 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)
  })