0

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

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

任何援助将不胜感激。谢谢你。

4

2 回答 2

2

我自己也有同样的问题,我发现的方法是htmlwidgetggplot里面创建一个。请记住,您可以在可反应单元格中包含任何 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)
  })
于 2021-02-19T03:39:34.990 回答
1

所以我不认为我见过有人被关ggplots进牢房reactable。下面的屏幕截图取自可反应的示例。似乎您可能必须定义一个 HTML 小部件或使用sparkline包提供的一个。

在此处输入图像描述

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

于 2020-10-21T14:22:14.597 回答