我使用graphviz dot在Shiny中生成svg文件。他们有可点击的链接。我是这样做的。
imageOutput("imagegraph",width = "100%", height = "auto",inline=F)
...
output$imagegraph <- renderImage({
...
list(src = svgGeneratedOnTheFlyByGraphviz.svg,
align="top",
width=wid,
contentType="text/svg+xml"
)
)
问题在于,虽然通过“新标签中的打开图像”查看的实际图像确实具有可点击链接,但在Shiny生成的div中,没有任何内容可点击。此外,文字不可选,这很奇怪。 (无法发布完整的可重现示例,因为使用Graphviz生成.svg的代码非常多毛,并且具有很多依赖性。) 我试图摆弄包括contentType在内的所有参数,但没有任何帮助。
答案 0 :(得分:2)
我认为这些链接无法点击,因为您使用img
标记来呈现svg
。此StackOverflow post表示您可以使用object
标记来克服此限制。但是,我认为使用svg
标记会提供最佳效果。这是一个最小的例子。根据您的问题,您可以将动态生成的svg
包装在HTML(...)
。
library(shiny)
library(htmltools)
# see Shiny docs
# http://shiny.rstudio.com/reference/shiny/latest/htmlOutput.html
# http://shiny.rstudio.com/reference/shiny/latest/renderUI.html
ui <- list(
uiOutput("svgout")
)
server <- function(input, output, session){
output$svgout <- renderUI({
HTML(
"
<svg>
<a xlink:href = 'https://developer.mozilla.org/en-US/docs/Web/SVG/Element/circle'>
<circle cx='60' cy='60' r='50'/>
</a>
</svg>
"
)
})
}
shinyApp(ui, server)