gpt4 book ai didi

r - 绘图显示在 renderTable 但不是 DT::renderDataTable

转载 作者:行者123 更新时间:2023-12-02 04:31:10 25 4
gpt4 key购买 nike

我正在尝试将一个小图放入 Shiny 的 DT::dataTableOutput 中,虽然我可以将一个图放入 tableOutput 中没有问题,但它没有在 DT 版本中完全不显示。

library(shiny)
ui <- fluidPage(
DT::dataTableOutput("data1"),
tableOutput("data2")
)

server <- function(input, output) {
output$data1 <- DT::renderDataTable({
dat <- cars[1:5,]
dat$test <- c("a","b","c","d",
'<div id="testPlot1" class="shiny-plot-output" style="width: 100px ; height: 100px"></div>')
dat
},escape=FALSE)
output$data2 <- renderTable({
dat <- cars[1:5,]
dat$test <- c("a","b","c","d",
'<div id="testPlot2" class="shiny-plot-output" style="width: 100px ; height: 100px"></div>')
dat
}, sanitize.text.function = function(x) x)
output$testPlot1 <- renderPlot({
par(mar=c(0,0,0,0))
plot(cars[[1]],cars[[2]])
},height=100,width=100)
output$testPlot2 <- renderPlot({
par(mar=c(0,0,0,0))
plot(cars[[1]],cars[[2]])
},height=100,width=100)
outputOptions(output, 'testPlot1', suspendWhenHidden=FALSE)
}

shinyApp(ui, server)

plot expected in red circle

最佳答案

我认为问题在于表格是稍后呈现的。

一种可能性是使用 plotOutput 渲染绘图,然后使用 JavaScript 将其移动到单元格中:

js <- c(
"function(){",
" var $plot = $('#testPlot1');",
" var $td = $('#data1').find('table').find('tr:last-child').find('td:last-child');",
" $td.append($plot);",
"}"
)

ui <- fluidPage(
plotOutput("testPlot1", width = "100px", height = "100px"),
DT::dataTableOutput("data1"),
tableOutput("data2")
)

server <- function(input, output) {
output$data1 <- DT::renderDataTable({
dat <- cars[1:5,]
dat$test <- c("a","b","c","d","")
dat
}, escape=FALSE, options = list(initComplete = JS(js)))
output$testPlot1 <- renderPlot({
par(mar=c(0,0,0,0))
plot(cars[[1]],cars[[2]])
},height=100,width=100)
}

shinyApp(ui, server)

enter image description here

在这里,我选择了目标单元格,因为它是最后一行的最后一个单元格。更通用的策略是在目标单元格中​​放置一个带有 iddiv,如下所示:

  output$data1 <- DT::renderDataTable({
dat <- cars[1:5,]
dat$test <- c("a","b","c","d",'<div id="target"></div>')
dat
}, escape=FALSE, options = list(initComplete = JS(js)))

然后你可以这样选择它:

js <- c(
"function(){",
" var $plot = $('#testPlot1');",
" var $td = $('#data1 #target');",
" $td.append($plot);",
"}"
)

关于r - 绘图显示在 renderTable 但不是 DT::renderDataTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48676750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com