2016-03-25 8 views
1

likertパッケージのプロット内に、likertパッケージとgridSVGパッケージを組み合わせてハイパーリンクを埋め込もうとしています。私は各質問のテキストを別のリンクにリンクしたいが、私は問題がある。次のコードは、すべての質問のテキストへのリンクを1つ埋め込んでいますが、各質問を別々に埋め込む方法を理解することはできません。あなたのご意見を事前におねがいします。likertプロット内にリンクを埋め込む方法、各リザートアイテムごとにリンクを設定する

#creates an example plot from sample data from likert package. 
require(likert) 
data(pisaitems) 
items29 <- pisaitems[,substr(names(pisaitems), 1,5) == "ST25Q" ] 
names(items29) <- c("Magazines", "Comic books", "Fiction", 
       "Non-fiction books", "Newspapers") 
l29 <- likert(items29) 
summary(l29) 
plot(l29) 

require(grid) 
require(gridSVG) 

#identifies grob of question text (all questions are in a single grob) 
titleGrobName <- grep("axis-l.3-3-3-3", grid.ls(print=FALSE)$name, value=TRUE) 

#embeds link in grob 
grid.hyperlink(titleGrobName, "http://www.r-project.org") 

#creates svg 
gridToSVG("testPlot.svg", "none", "none") 

答えて

2

このグループ化されたGROBは珍しいことではありません。 likertを書き換えてこれらのグループを解除するとは思わないので、gridの後にSVGXMLと入力したほうが良いでしょう。これを達成する一つの方法がここにあります。あなたは、このグラフィックはより大きなウェブページの一部であることが予想される場合

live example

またHTML/JavaScript側にリンクを追加することができます。

#creates an example plot from sample data from likert package. 
require(likert) 
data(pisaitems) 
items29 <- pisaitems[,substr(names(pisaitems), 1,5) == "ST25Q" ] 
names(items29) <- c("Magazines", "Comic books", "Fiction", 
        "Non-fiction books", "Newspapers") 
l29 <- likert(items29) 
summary(l29) 
plot(l29) 

# if possible to use htmltools from RStudio 
# install.packages("htmltools") 
# then we can add the links on the 
# XML side instead of in grid 
library(XML) 
library(htmltools) 
library(gridSVG) 

# export as XML SVG 
likert_svg <- grid.export("", addClasses=TRUE)$svg 

# find our axes 
nodes <- getNodeSet(
    likert_svg, 
    # thanks http://stackoverflow.com/questions/5818681/xpath-how-to-select-node-with-some-attribute-by-index 
    "(//x:g[contains(@id,'axis')])[1]//x:tspan", 
    "x" 
) 

lapply(
    nodes, 
    function(node){ 
    # get the text value of the node 
    lbl = xmlValue(node) 
    # remove the text from our node 
    xmlValue(node) <- "" 

    # create a <a href=> hyperlink 
    # https://www.w3.org/wiki/SVG_Links 
    a_node <- newXMLNode(
     "a", 
     ####### change your link here ########### 
     attrs = c("xlink:href"=paste0("http://google.com/search?q=",lbl)), 
     lbl 
    ) 
    # add our new linked text to the node 
    addChildren(node, a_node) 
    } 
) 


# look at it in the browser/RStudio Viewer 
browsable(
    HTML(
    saveXML(
     # export as SVG XML 
     likert_svg, 
     prefix = "" 
    ) 
) 
) 
+0

timelyportfolioのjavascriptの例が動作しているようです。ありがとう! – Jeremyjaytaylor

+0

この例は機能しているように見えますが、リンクされた軸ラベルを使用して結果のsvgファイルをエクスポートするにはどうすればよいですか?この例では、結果として得られるsvgがブラウザで開きますが、これは一時フォルダにあるようですが、操作を実行して、リンクされた軸を使って結果のSVGをエクスポートするにはどうしたらいいですか?(以前にtestPlot.svg ")?私はsvgファイルを作成した例コードの 'grid.export(" "、addClasses = TRUE)$ svg'部分にファイル名を追加しようとしましたが、ライブリンクはありませんでした。ご協力いただきありがとうございます! – Jeremyjaytaylor

+0

私が正しく理解していれば、 'saveXML'はあなたが望むものを与えます(http://www.inside-r.org/packages/cran/xml/docs/saveXMLを参照)。完全なXMLが必要な場合は、 'prefix =" "'を削除することができます。ファイルが必要な場合は、 'file =" mysvg.svg "'を指定することができます。 'saveXML(likert_svg、prefix =" ")' – timelyportfolio

関連する問題