在 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)
})
我希望像这样重新创建一个 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)
})