日々のつれづれ

不惑をむかえ戸惑いを隠せない男性の独り言

変わった散布図symbols関数、そして引数pchについて少し

Rは多様なグラフが描けるのが本当におもしろい。凝り出すときりがない。
symbol関数とpchのこと。
でも、pchはHmiscパッケージのshow.pch関数がとても便利です。
こっちにわかりやすい図がありました。

Rパッケージガイドブック

Rパッケージガイドブック

  • 作者: 岡田昌史,荒木孝治,伊藤康広,里洋平,高柳慎一,棚瀬貴紀,谷村晋,中谷朋昭,蓮見亮,林真広,樋口千洋,福島真太朗,牧山文彦,横山貴央,akira,mickey24
  • 出版社/メーカー: 東京図書
  • 発売日: 2011/04/09
  • メディア: 単行本
  • 購入: 2人 クリック: 1,298回
  • この商品を含むブログ (16件) を見る

  • symbol関数

symbol関数は引数circles, squares, rectangles, stars, thermometers, boxplotsを持ちます。
引数pchのようなものですが、比較的自由度をもって指定できるので、使い方によっては効果的なグラフになるのでは?
(僕はクリティカルな現場に遭遇したことがないのですが…)

> jpeg("symbol.jpg")
> x <- cbind("a"=1:5,"b"=5:1,"c"=6:10,"d"=10:6,"e"=sample(10,5)/10)
> layout(matrix(1:6,ncol=3))
> symbols(x[,1:2],circles=x[,1]/10,inches=FALSE,main="circles")
> symbols(x[,1:2],squares=x[,2]/10,inches=FALSE,main="squares")
> symbols(x[,1:2],rectangles=x[,3:4]/10,inches=FALSE,main="rectangles")
> symbols(x[,1:2],stars=x[,3:5]/10,inches=FALSE,main="stars")
> symbols(x[,1:2],thermometers=x[,3:5]/10,inches=FALSE,main="thermometers")
> symbols(x[,1:2], boxplots=x/10,inches=FALSE,main="boxplots")
> dev.off()

で、こんな感じ。

きっと、2変量の関係に対して、第3の要素を加えてインパクトをつけたいときにいいのだと思う。
たとえば、[:title]で使ったscatterplot3dグラフは

> x <- data.frame("steps"=rep(rep(-2:2,each=5),2)
+ , "sin"=sin(seq(-pi,pi,length.out=50))
+ ,"cos"=cos(seq(-pi,pi,length.out=50)))
> # circleの大きさは負値を取れないので絶対値に
> (x <- subset(x, subset=x$"steps">0))
   steps           sin        cos
16     1 -9.384684e-01  0.3453651
17     1 -8.865993e-01  0.4625383
(中略)
49     2  1.278772e-01 -0.9917900
50     2  1.224606e-16 -1.0000000
> jpeg("symbol2.jpg")
> symbols(x=x$"sin", y=x$"cos", circles=x$"steps",main="scattetplot3d_data")
> dev.off()

で、こうなる

  • 引数pchについて

pchは文字も指定できますが、オフセット値をいくつか持っています。
あらかじめ知っているととても便利です。

x <- cbind(x=rep(1:12,each=12),y=rep(1:12,times=12))
jpeg("pch.jpeg")
plot(x, pch=c(0:25,32:127),cex=2) # 26 ~ 31にはpchの割り当てはありません
dev.off()

で、こんな感じ