2016-05-09 8 views
0

私はsvgファイルをShinyでgraphvizドットを使って生成しています。彼らはクリック可能なリンクを持っています。私はこれのようにやっている。クリック可能なリンクが付いたsvg - クリック不可

imageOutput("imagegraph",width = "100%", height = "auto",inline=F) 
... 
output$imagegraph <- renderImage({ 
... 
list(src = svgGeneratedOnTheFlyByGraphviz.svg, 
    align="top", 
    width=wid, 
    contentType="text/svg+xml" 
    ) 
) 

問題は、「新しいタブで開いている画像」を通して見たように、実際の画像はクリック可能なリンクを持っていないものの、シャイニーによって生成されたdiv要素の中に、何もクリック可能ではないということです。また、テキストは選択できません。これは変です。 (Graphvizを使用して.svgを生成するコードがかなり毛深く、多くの依存関係を持っているため、完全な再現可能な例を投稿できません) contentTypeを含むすべてのパラメータで手を加えましたが、役に立たなかった。

答えて

2

svgをレンダリングするのにimgタグを使用しているため、リンクがクリックできないと思います。このStackOverflow postは、objectタグを使用することでこの制限を克服できます。しかし、私はsvgタグを使用すると良い結果が得られると思います。ここには最小の例があります。あなたの質問に基づいて、動的に生成されたsvgHTML(...)にラップすることができます。

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) 
+0

ありがとうございます!私はのようにオブジェクトタグを使った方が良い結果を得ました。 –

+0

あなたは 'svglite' https://github.com/hadley/svgliteを使用していますか?そうでない場合は、試してみる価値があるかもしれません。 – timelyportfolio

関連する問題