svglite 1.0.0を使ってみる

svgliteというパッケージが出ました。

これは、プロットをSVGとして出力するときに使うものです。png()とかjpeg()と同じノリで使います。Rの組み込みのsvg()もあるんですが、重かったり遅かったりするということでつくられたらしいです。

Unfortunately, R’s built-in svg() device is focussed on high quality rendering, not size or speed.

R Markdownでも使えて、こんな風にチャンクオプションを指定しておくと、画像をSVGで出力してくれます。

 ```{r setup, include = FALSE}
library(svglite)
knitr::opts_chunk$set(
  dev = "svglite",
  fig.ext = "svg"
)
 ```

小ネタとしては、こんな風にすると直接SVGを埋め込むこともできます。

 ```{r setup}
library(knitr)
library(svglite)

local({
  knit_hooks$set(plot = function(x, options) {
    paste(readLines(x), collapse = '\n')
  })
  
  opts_chunk$set(
    dev = "svglite",
    dev.args = list(standalone = FALSE),
    fig.ext = "svg"
  )
})
 ```

するとどういうことができるかというと、SVGにスタイルが付けられます。アニメーションとかできます。

たとえばこんな感じのCSSをつくって、

polyline {
  stroke-dasharray: 50;
  animation: dash 10s linear;
}

@keyframes dash {
  to {
    stroke-dashoffset: 2000;
  }
}

YAML Front-matterに指定すると、

output:
  html_document:
    css: svglite_test.css

こんな気持ち悪いものができます。

RPubs - svglite + SVG animation

うーん。。

生成されてくるSVGには、どの線が何に使われているか(データを表す線なのか、枠線なのかとか)を判別する情報がないので、こんな風に一括でスタイルを設定するようなことしかできません。この小ネタは、あんまり意味のある用途には使えなさそうです。

なにかいい使い方あれば教えてください。