対数軸でのプロット     Last modified: Jun 28, 2004

目的

片対数軸または両対数軸でプロット(散布図)を描く。
片対数グラフ両対数グラフ

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)

graph

plot(x, y, log="y") graph
   両対数グラフを描く
x <- 2^seq(1, 5, length=10)
y <- 1.3^(seq(2, 10, length=10))
log.plot(x, y, log.of.x=TRUE)

graph

plot(x, y, log="xy") graph
・ 解説ページ:片対数グラフ両対数グラフ


・ 直前のページへ戻る  ・ E-mail to Shigenobu AOKI ( @si.gunma-u.ac.jp )

Made with Macintosh