目的 片対数軸または両対数軸でプロット(散布図)を描く。 片対数グラフ,両対数グラフ R の plot のパラメータの log= で指定すれば対数グラフは簡単に描ける。 log="x" x 軸を対数軸にする log="y" y 軸を対数軸にする log="xy" x 軸,y 軸ともに対数軸にする log="yx" x 軸,y 軸ともに対数軸にする 使用法 log.plot(x, y, log.of.x=FALSE, x.label="", y.label="", title="", color="gray") 引数 x x 値(座標)ベクトル y y 値(座標)ベクトル log.of.x 横軸(x 軸)も対数軸にするときに TRUE を指定する x.label 横軸の名前 y.label 縦軸の名前 title 図のタイトル color グリッド線の色。描かないときには,地色と同じにする(^_^;) ソース インストールは,以下の 1 行をコピーし,R コンソールにペーストする source("http://aoki2.si.gunma-u.ac.jp/R/src/log_plot.R", encoding="euc-jp") # 片対数軸または両対数軸でプロット(散布図)を描く log.plot <- function( x, # 横軸に取る変数 y, # 縦軸に取る変数 log.of.x=FALSE, # 横軸も対数軸にするときに TRUE にする x.label="", # 横軸の名前 y.label="", # 縦軸の名前 title="", # 図のタイトル color="gray") # 格子線の色 { log.axis <- function(z, which) # 対数軸を描く関数 { z <- floor(log10(z)) # 対数にしたときの整数部 log.min <- min(z) # 最小値 z2 <- 1:10*10^log.min # 値の範囲をカバーするように n <- max(z)-log.min # 10 倍しながら順次,右の位置に目盛りを描く z2 <- rep(z2, n+1)*10^rep(0:n, each=10) # 対数目盛り位置の数値 log.z2 <- log10(z2) # 目盛りを描く位置 axis(which, at=log.z2, labels=z2) # log.z2 の位置に,z2 という数値を描く if (which == 1) { abline(v=log.z2, col=color) # 垂直格子線を描く } else { abline(h=log.z2, col=color) # 水平格子線を描く } } OK <- complete.cases(x, y) # 欠損値を持つケースを除く x <- x[OK] y <- y[OK] log.y <- log10(y) # 縦軸に取る変数の常用対数を取る if (log.of.x == FALSE) { # 縦軸だけが対数軸の場合 plot(x, log.y, type="n", yaxt="n", xlab=x.label, ylab=y.label, main=title) points(x, log.y) # データ点を描く abline(v=x, col=color) # 垂直格子線を描く } else { # 縦軸,横軸ともに対数軸の場合 log.x <- log10(x) # 横軸に取る変数の常用対数を取る plot(log.x, log.y, type="n", xaxt="n", yaxt="n", xlab=x.label, ylab=y.label, main=title) points(log.x, log.y) # データ点を描く log.axis(x, 1) # 横軸を対数軸として描く } log.axis(y, 2) # 縦軸を対数軸として描く } 使用例
片対数グラフを描く x <- seq(1, 9.5, 0.5) y <- exp(x) log.plot(x, y) plot(x, y, log="y") |
両対数グラフを描く x <- 2^seq(1, 5, length=10) y <- 1.3^(seq(2, 10, length=10)) log.plot(x, y, log.of.x=TRUE) plot(x, y, log="xy") |