google chart apiのようなものをR言語を利用して再現してみる(R Advent Calendar2012)

R Advent Calendar2012、18日目です。
google chart apiは、パラメータを指定してリクエストを送るとpng画像としてグラフを作成してくれる。
例えば、

<img src="http://chart.apis.google.com/chart?chs=300x300&chd=t:10,20,30|40,50,60&cht=s">

のようにhtml内に記述すれば、

と表示してくれる。

これらは非常に便利なのだが、R言語を使う人ならば、
普段と同じような感覚で書けると幸せになれるのではないだろか?
と言う事で、作ってみました。

例えば、

<img src="http://api.gepuro.net/plot?x=10,20,30&y=40,50,60&grid=1&xlab=xziku&ylab=yziku&type=p" width=500 height=500>

というように書けば、

と表示してくれます。

現在、利用可能な引数として、

  • xlab (未指定では"x")
  • ylab (未指定では"y")
  • main (未指定では" ")
  • type (未指定では"p")
  • gird (未指定では"0", grid()を使用する場合は"1"にする)

です。
軸名などは、URLエンコードしてあげれば日本語も表示できます。

自分としては、後者のようにR言語らしくかけると楽に感じるし、
描けるグラフの種類も増えるので便利に思う。

内部的な話をすると、リクエストを受ける部分はpythonで書いてあり、
返り値としてR言語上で作成した画像ファイルを返すようにしています。

とりあえず、Rのコードを載せておきます。

#!/usr/bin/Rscript

config <- read.table("stdin", stringsAsFactors=FALSE, sep="\t")
filename <- config$V1
xlab <- config$V2
ylab <- config$V3
main <- config$V4
usegrid <- config$V5
type <- config$V6

dat <- read.csv(paste("./data/", filename, sep=""), header=FALSE)

png(file=paste("./graph/", filename, ".png", sep=""))
plot(dat$V1, dat$V2, xlab=xlab, ylab=ylab, main=main, type=type)
if( usegrid == 1 ){
  grid()
}
dev.off()

しばらく、このまま運用してみて、需要に応じて機能追加や仕様変更を行おうかと考えています。