R-Tips Tinn-R
東工大 R Tips 矢印を描く
飯島の雑記帳 plotいろいろ
plotの詳細いろいろ
高級関数 > curve(sin, 0,2*pi)
時系列を表示(要するに連番データを書き出す) > ts.plot( data.vector )
頻度プロット > hist(x)
頻度プロット(線で結ぶ) > plot( density(x) )
行列を画像として表示 > image(x, y, z, col=terrain.colors(100), xlab="hoge", ylab="hage") 色指定は次のようにする > image( ... col=terrain.colors(100) ... ) 緑→黄→白 ほかにも、 rainbow(100) 虹色 heat.colors(100) 赤→黄 topo.colors(100) 青→緑→黄 gray(seq(0,1,length=100)) 黒→白 点の散布図を書き足す。 > points(p.x, p.y)
※ image で行列の転地がひっくり返るのを修正するコード > image2 <- function(m, ...) image(t(m[nrow(m):1,]), col=gray(1:100/100), ...)
行列を画像として表示 その2
filled.contour(x, y, z=mat) image進化版。カラーバー付き。
点を書き足すには次のようにやるのが簡単 pointsの詳細については後述
> filled.contour(x, y, z=mat, plot.axes={axis(1); axis(2); points(p.x, p.y)})
色指定は次のようにやる。レベル指定は image と違って手動。
> filled.contour(... color=terrain.colors, level=c(10, 20, 30, 40) ...)
タイトルとかは次
> filled.contour(... plot.title=title(main="main", xlab="hage", ylab="hage")...)
行列を画像として表示 その3 contour 等高線 (lattice) levelplot 同じようなやつ。
重ね描き > plot(x, y, xlim=c(0,1), ylim=c(0,1)) > par(new=T); plot(x, y, xlim=c(0,1), ylim=c(0,1), ann=F)
データ点を描き足し
par(new=T)は不要なことに注意!
> plot(x.calc, y.calc, type="l")
> points(x.data, y.data, pch=20, cex=1, col=c("red", "blue"))
(座標を変えずに)重ね描き > curve(cos, 0,2*pi)
(重ね描きをするために)白地を描画 > plot( -10:10, 0:1, type="n" ) #x軸の範囲が-10:10で,y軸の範囲が0:1になる。
軸の目盛りを調整する。 > plot( data, lab=c(x, y, hoge) ) hoge はなんでも良いらしい。 x で x軸の目盛りの数 ←! y で y軸の目盛りの数 ←!
軸目盛りに好きな名前をつける。 > plot( 1:5, 0:1, type="n", xaxt="n" ) ←軸を書かない!両軸消すには axes=FALSE > axis( 1, at=1:5, labels=c(1, "hoge", 100, "hage", 5) )
グリッドを描く > plot( hoge, panel.first = grid( x, y ) ) x で x軸から生える毛の数 y で y軸から生える毛の数
3次元プロットの例 > x <- seq(-1,1,by=0.1) > y <- seq(-1,1,by=0.1) > f <- function(x,y) x^2+y^2 > z <- outer(x,y,f) # zを各(x,y)の組み合わせに対して計算 > z[is.na(z)] <- 1 # NAがあれば,1で置き換える > persp(x, y, z, theta=30, phi=30, ylabel="x'")
別の3次元プロット > library(lattice) > cloud(z ~ x * y)
色付きの散布図
> lev <- 20 # 階調
> suf <- findInterval( z, seq( min(z), max(z), length.out=lev ) )
> plot( x, y, col=rainbow(lev)[suf] )
コピペ用
plot.col <- function( x, y, z, lev=20 ){
suf <- findInterval( z, seq( min(z), max(z), length.out=lev ) )
plot( x, y, col=rainbow(lev)[suf], pch=19 )
}