d3 + ggplot + gridSVG
d3 サンプルプログラム
d3 の機能を使って、文字の色を変えるプログラム
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; initial-scale=1.0; charset=UTF-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<meta http-equiv="MSThemeCompatible" content="yes" />
<script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
<title>
JavaScript Sample
</title>
</head>
<body>
<div id="title">
<p>
My title
</p>
</div>
<div id="body">
<p>
My body
</p>
</div>
<p>
hoge
</p>
<script type="text/javascript">
d3.selectAll("#title").style("color", "red");
</script>
</body>
</html>
d3 の機能を使って SVG のズームを行うプログラム
<!DOCTYPE html>
<head>
<meta charset = "utf-8">
<script src = "http://d3js.org/d3.v3.js"></script>
</head>
<body>
<div id="hoge">
<svg >
<g>
<circle cx="50" cy="50" r="20" />
<rect x="80" y="80" width="60" height="40" />
</g>
<defs>
<path id="s01"
d="M 20,60 C 80,-20 180,100 240,20"
stroke="black" fill="none" />
</defs>
<text font-size="20" dx="10" dy="-5">
<textPath xlink:href="#s01">
hoge hoge hoge hoge
</textPath>
</text>
</svg>
</div>
<script>
var svg = d3.selectAll("#hoge g, #hoge text");
svg.call(d3.behavior.zoom().scaleExtent([1, 8]).on("zoom", zoom))
function zoom() {
svg.attr("transform", "translate(" + d3.event.translate + ")scale(" + d3.event.scale + ")");
}
</script>
</body>
ggplot2 + gridSVG サンプルプログラム
ggplot2 のグラフを svg 形式ファイルで保存するサンプルプログラム
require(ggplot2)
require(gridSVG)
require(XML)
p <- ggplot(iris, aes(Sepal.Length, Sepal.Width))
p + geom_point()
s1 <- grid.export("/tmp/s1.svg")
q()
ggplot2 のグラフを含む HTML ファイルを保存するサンプルプログラム(グラフ部分は SVG)
http://www.r-bloggers.com/ggplot2-meet-d3/ より転載し、若干の変更(変更箇所を太字で示す).
#get the latest version of gridSVG
#install.packages("gridSVG", repos="http://R-Forge.R-project.org")
require(ggplot2)
require(gridSVG)
require(XML)
#draw a ggplot2 graph
#thanks http://sharpstatistics.co.uk/r/ggplot2-guide/
p <- ggplot(iris, aes(Sepal.Length, Sepal.Width))
p + geom_point()
p + facet_grid(. ~ Species) + stat_smooth(method = "lm")
#define a simple html head template
htmlhead <-
'<!DOCTYPE html>
<head>
<meta charset = "utf-8">
<script src = "http://d3js.org/d3.v3.js"></script>
</head>
<body>
'
#use gridSVG to export our plot to SVG
mysvg <- grid.export("panzoom1.svg")
#define a simple pan zoom script using d3
panzoomScript <-
' <script>
var svg = d3.selectAll("#gridSVG");
svg.call(d3.behavior.zoom().scaleExtent([1, 8]).on("zoom", zoom))
function zoom() {
svg.attr("transform", "translate(" + d3.event.translate + ")scale(" + d3.event.scale + ")");
}
</script>
</body>
'
#combine all the pieces into an html file
sink("/tmp/panzoom_ggplot2.html")
cat(htmlhead,saveXML(mysvg$svg),panzoomScript)
#close our file
sink(file=NULL)