闪亮的 Flexdashboard 中的 image_composite (Magick) 返回错误

Posted

技术标签:

【中文标题】闪亮的 Flexdashboard 中的 image_composite (Magick) 返回错误【英文标题】:image_composite (Magick) return error in Shiny Flexdashboard 【发布时间】:2022-01-21 10:30:28 【问题描述】:

我需要在 Shiny Flexdashboard 中构建合成图片,以将 Ggplot2 图表放置在背景图像上。

我使用以下代码:

```r

renderImage(

bkgDom <- image_read('background.png')
myChart <- ggplot(data=individualObs, aes(individualObs$SA)) + geom_histogram()
fig <- image_graph(width = 600, height = 550)
myChart
dev.off()
image_composite(bkgDom, fig, offset = "+1030+50", operator = "multiply") , deleteFile = TRUE)

renderImage() 中的代码在 RStudio 中运行良好,但在 Shiny Flexdashboard 代码中使用时返回错误“'externalptr' 类型的对象不是子集”。

关于如何解决这个问题的任何想法?

提前感谢您的支持!

【问题讨论】:

【参考方案1】:

无论出于何种原因,临时文件存在问题,因此我使用了 image_write() 函数来保存 image_composite() 的结果,然后使用 list() 函数检索文件。

除此之外,为了避免创建空文件,必须通过 print() 函数公开 Ggplot2 图表。

这是在 Shiny Flexidashboard 中工作的代码:

renderImage(

#Set the first image-magic pointer
bkgDom <- image_read('background.png')

myChart <- ggplot(data=individualObs, aes(individualObs$SA)) + geom_histogram()

#Set the space to load the Ggplot chart in
fig <- image_graph(width = 400, height = 400)

#Print the Ggplot chart into the fig pointer
print(myChart)

#Create the composite image into a image-magick pointer and adjust the position
pic <- image_composite(bkgDom, fig, offset = "+580-25", operator = "multiply")

#Save the pointer into a png file
image_write(pic,"test.png")

#Read and show the png file
list(src = "test.png", contentType = 'image/png', )

, deleteFile = TRUE)

【讨论】:

很高兴它可以工作:)【参考方案2】:

查看the docs,它说表达式应该返回一个列表。由于您编写的内容返回了“externalptr”类型的对象(或者我猜image_composite() 文档没有告诉我输出的值),我认为错误是因为闪亮找不到src。此外,您的合成图像可能还需要临时保存。

没有足够的代码来重现,但从文档中这应该可以解决:

renderImage(
  
  bkgDom <- image_read('background.png')
  myChart <- ggplot(data=individualObs, aes(individualObs$SA)) + geom_histogram()
  fig <- image_graph(width = 600, height = 550)
  myChart
  dev.off()

  # A temp file to save the output.
  outfile <- tempfile(fileext='.png')
  png(outfile)
  image_composite(bkgDom, fig, offset = "+1030+50", operator = "multiply")
  dev.off() 
  
  # Return a list containing the filename
  list(src = outfile,
       alt = "This is alternate text")
  , deleteFile = TRUE)

我单独保存了合成,但这可能与您修改的其他图像同步完成?

如果这不起作用,您能否提供更多代码以使其可重现?

【讨论】:

建议的代码从页面中删除错误消息,但图像在仪表板上不可见。可用的代码、数据和背景图 [1]:acceleration-lab.com/agility/wp-content/uploads/2021/12/… [2]:acceleration-lab.com/agility/wp-content/uploads/2021/12/… [3]:acceleration-lab.com/agility/wp-content/uploads/2021/12/… 嗯,这很奇怪。谢谢你的代码,我去看看。 对,我已经尝试了几种变体,但都没有成功。我相信问题是由于 image_composite 生成的是 Magick 指针而不是图像。

以上是关于闪亮的 Flexdashboard 中的 image_composite (Magick) 返回错误的主要内容,如果未能解决你的问题,请参考以下文章

尝试从 R 脚本渲染闪亮的 flexdashboard 时找不到错误对象输出

使用 flexdashboard 模板重现闪亮

使用带闪亮的 Flexdashboard 时如何拥有可编辑的 DT 表?

如何将带有 plotly 的 ggplot 嵌入到 r 闪亮的应用程序或 flexdashboard 中?

在 flexdashboard 闪亮小部件中创建一个依赖于另一个输入变量的输入变量

输入菜单内容不会溢出 flexdashboard 中的行框