トップページ -> 実践知識 -> R を用いた統計処理/データマイニング -> R を用いての3次元の散布図の作成
[サイトマップへ], [サイト内検索へ],

R を用いての3次元の散布図の作成

サイト構成 連絡先,業績など 実践知識 データの扱い コンピュータ 教材 サポートページ

この Web ページでは,R を用いての3次元の散布図の作成手順を図解で説明する

あらかじめ決めておく事項

散布図を作成する CSV ファイル名と属性名を決めておいてください.

この Web ページでは,次のように書きます.


前準備

この Web ページの手順を単純になぞりたいときは, 「外国為替データ(時系列データ)の作成手順」の Web ページの記述に従って,Book1.csv の作成を終えていること.あるいは,Book1.csv をダウンロードし,確認の上,使ってください.このファイルは C:\R に置いてください.


必要となるソフトウエア


CSVファイルを読み込み,データテーブルに格納

  1. (前準備) 使用する CSV ファイルの作成

    ※ ここでは Book1.csv をダウンロードし,分かりやすいディレクトリに置く

    (参考: 「外国為替データ(時系列データ)の情報源の紹介」の Web ページ

    以下の説明では、

    として説明を続ける.

    自前の CSV ファイルを使うときの注意: read.table() 関数を使うので, 属性名は英語になっていること.属性名は,CSV ファイルの第一行目に書いていること.

  2. 使用する CSV ファイルの確認

    属性名が CSV ファイルの1行目に書かれていることを確認する.

  3. R の起動

    ◆ Windows での動作画面例

    ◆ Ubuntu での動作画面例

  4. read.table」を用いて,ファイルを変数に読み込み

    端末で,次のコマンドを実行.

    ◆ Windows での動作手順例

    X <- read.table("/tmp/Book1.csv", header=TRUE, sep=",", na.strings="NA", dec=".", strip.white=TRUE);
    

    ◆ Linux での動作手順例

    X <- read.table("/tmp/Book1.csv", header=TRUE, sep=",", na.strings="NA", dec=".", strip.white=TRUE);
    

    オプション

  5. 変数 X の中身の確認

    端末で,次のコマンドを実行.。

    edit(X);
    

    端末で,次のコマンドを実行.。

    str(X)
    


3次元散布図の実行例 (rgl を使用)

  1. rgl パッケージの読み込み

    端末で,次のコマンドを実行.

    library(rgl)
    

  2. plot3d の実行

    plot3d(x = X$USD, y = X$EUR, z = X$AUD )
    

3次元散布図の実行例 (scatterplot3d を使用)

  1. scatterplot3d パッケージの読み込み

    端末で,次のコマンドを実行.

    library(scatterplot3d)
    

  2. scatterplot3d の実行

    scatterplot3d(x = X$USD, y = X$EUR, z = X$AUD )
    

3次元散布図アニメーションの作成 (rgl を使用)

◆ 実行手順例

plot3d(x = X$USD, y = X$EUR, z = X$AUD )
for( i in 0:359 ) {
  rgl.viewpoint( i, i/4 )
  rgl.snapshot( fmt="png", sprintf("hoge%03d.png", i)  )
}

※ 1つのビデオファイルにまとめたい時は ffmpeg コマンドを使って 「ffmpeg -i /tmp/hoge%03d.png -vcodec mjpeg -sameq /tmp/hoge.avi 」


(参考)scatterplot3d のヘルプ

Usage

scatterplot3d(x, y=NULL, z=NULL, color=par("col"), pch=NULL,
    main=NULL, sub=NULL, xlim=NULL, ylim=NULL, zlim=NULL,
    xlab=NULL, ylab=NULL, zlab=NULL, scale.y=1, angle=40,
    axis=TRUE, tick.marks=TRUE, label.tick.marks=TRUE,
    x.ticklabs=NULL, y.ticklabs=NULL, z.ticklabs=NULL,
    y.margin.add=0, grid=TRUE, box=TRUE, lab=par("lab"),
    lab.z=mean(lab[1:2]), type="p", highlight.3d=FALSE,
    mar=c(5,3,4,3)+0.1, col.axis=par("col.axis"),
    col.grid="grey", col.lab=par("col.lab"),
    cex.symbols=par("cex"), cex.axis=0.8 * par("cex.axis"),
    cex.lab=par("cex.lab"), font.axis=par("font.axis"),
    font.lab=par("font.lab"), lty.axis=par("lty"),
    lty.grid=par("lty"), lty.hide=NULL, log="", ...)

Arguments

Author(s) Uwe Ligges ligges@statistik.tu-dortmund.de; http://www.statistik.tu-dortmund.de/~ligges.

References Ligges, U., and Maechler, M. (2003): Scatterplot3d ? an R Package for Visualizing Multivariate Data. Journal of Statistical Software 8(11), 1?20. http://www.jstatsoft.org/

See Also persp, plot, par.

種々のグラフ

  1. 「pch = 20 」を指定

    黒丸でプロット

    scatterplot3d(x = X$USD, y = X$EUR, z = X$AUD,
    main = "pch=20",
    pch = 20)
    

  2. 「color = ..., pch = 20」を指定

    散布図の点に色付け

    scatterplot3d(x = X$USD, y = X$EUR, z = X$AUD,
    main = "color = ..., pch = 20",
    color = rep( "green", length( X$USD ) ), pch = 20 )
    

  3. 「color = rep( grey( ..., pch = 20」を指定

    散布図の点に色付け.grey() 関数を使用し,濃淡付けを行う(ここでは,新しいほど,黒に近い色).

    scatterplot3d(x = X$USD, y = X$EUR, z = X$AUD,
    main = "color = rep( grey( ..., pch = 20",
    color = rep( grey( c( length( X$USD ):1 ) / length( X$USD ) ) ), pch = 20 )
    

  4. 「color = rep( rgb( ..., pch = 20」を指定

    散布図の点に色付け.rgb() 関数を使用し,RGB 3原色で色を指定する.

    scatterplot3d(x = X$USD, y = X$EUR, z = X$AUD,
    main = "color = rep( rgb( ..., pch = 20",
    color = rep( rgb(  c( length( X$USD ):1 ) / length( X$USD ), 0.5, 0.5 ) ), pch = 20 )
    

  5. 「color = rep( rgb( ..., pch = 20」を指定

    散布図の点に色付け.rgb() 関数を使用し,RGB 3原色で色を指定するが, ここではアルファ値を指定して,半透明にする

    scatterplot3d(x = X$USD, y = X$EUR, z = X$AUD,
    main = "color = rep( rgb( ..., pch = 20",
    color = rep( rgb(  c( length( X$USD ):1 ) / length( X$USD ), 0.5, 0.5, 0.2 ) ), pch = 20 )
    

  6. 「highlight.3d=TRUE, pch = 20」を指定

    遠近感を表現(z 軸報告の値を使って色を変える)

    scatterplot3d(x = X$USD, y = X$EUR, z = X$AUD,
    main = "highlight.3d=TRUE, pch = 20",
    highlight.3d = TRUE, pch = 20)
    

  7. 「highlight.3d=TRUE, type = "h", pch = 20」を指定 type = "h" を指定することで,縦棒が付加される.

    scatterplot3d(x = X$USD, y = X$EUR, z = X$AUD,
    main = "highlight.3d=TRUE, type = \"h\", pch = 20",
    highlight.3d = TRUE, type = "h", pch = 20)
    

  8. 「highlight.3d=TRUE, type = "h", pch = " "」を指定 「type = "h", pch = " "」を指定することで,縦棒のみの表示になる.

    scatterplot3d(x = X$USD, y = X$EUR, z = X$AUD,
    main = "highlight.3d=TRUE, type = \"h\", pch = \" \"",
    highlight.3d = TRUE, type = "h", pch = " " )
    

  9. 「highlight.3d=TRUE, type = "h", lwd = 5, pch = " "」を指定 「lwd = ...」を指定することで,縦棒の太さを調整できる.

    scatterplot3d(x = X$USD, y = X$EUR, z = X$AUD,
    main = "highlight.3d=TRUE, type = \"h\", lwd = 5, pch = \" \"",
    highlight.3d = TRUE, type = "h", lwd = 5, pch = " " )
    

  10. 「col.axis="blue", col.grid="lightblue"」を指定

    軸とグリッドの配色

    scatterplot3d(x = X$USD, y = X$EUR, z = X$AUD,
    main = "col.axis=\"blue\", col.grid=\"lightblue\"",
    col.axis="blue", col.grid="lightblue",
    highlight.3d = TRUE, pch = 20)
    

  11. 「x.ticklabs = c( "95 yen", "100 yen", "105 yen", "110 yen", "115 yen", "120 yen", "125 yen" )」を指定

    目盛りに書かれる文字列の指定

    scatterplot3d(x = X$USD, y = X$EUR, z = X$AUD,
    main = "x.ticklabs= ...",
    x.ticklabs = c( "95 yen", "100 yen", "105 yen", "110 yen", "115 yen", "120 yen", "125 yen" ), 
    col.axis="blue", col.grid="lightblue",
    highlight.3d = TRUE, pch = 20)
    

  12. 「angle = ...」を指定

    角度の調整

    scatterplot3d(x = X$USD, y = X$EUR, z = X$AUD,
    main = "angle = 20",
    col.axis="blue", col.grid="lightblue",
    highlight.3d = TRUE, pch = 20,
    angle = 20)
    

  13. 「angle = ..., scale.y = ...」を指定

    角度の調整. scale.y では,表示される立体の y 方向の伸び縮み.

    scatterplot3d(x = X$USD, y = X$EUR, z = X$AUD,
    main = "angle = 20, scale.y = 0.5",
    col.axis="blue", col.grid="lightblue",
    highlight.3d = TRUE, pch = 20,
    angle = 20, scale.y = 0.5)
    

  14. 「zlim = c(90, 100)」を指定

    描画範囲の指定

    scatterplot3d(x = X$USD, y = X$EUR, z = X$AUD,
    main = "zlim = c(90, 100)",
    col.axis="blue", col.grid="lightblue", zlim = c(90, 100),
    highlight.3d = TRUE, pch = 20)
    

    以下,scatterplot3d に付属のサンプルプログラムを引用.

      ## example 5
      data(trees)
      s3d <- scatterplot3d(trees, type="h", highlight.3d=TRUE,
          angle=55, scale.y=0.7, pch=16, main="scatterplot3d - 5")
      # Now adding some points to the "scatterplot3d"
      s3X$points3d(seq(10,20,2), seq(85,60,-5), seq(60,10,-10),
          col="blue", type="h", pch=16)
      # Now adding a regression plane to the "scatterplot3d"
      attach(trees)
      my.lm <- lm(Volume ~ Girth + Height)
      s3X$plane3d(my.lm, lty.box = "solid")
     
      ## example 6; by Martin Maechler
      cubedraw <- function(res3d, min = 0, max = 255, cex = 2, text. = FALSE)
      {
        ## Purpose: Draw nice cube with corners
        cube01 <- rbind(c(0,0,1), 0, c(1,0,0), c(1,1,0), 1, c(0,1,1), # < 6 outer
                        c(1,0,1), c(0,1,0)) # <- "inner": fore- & back-ground
        cub <- min + (max-min)* cube01
        ## visibile corners + lines:
        res3d$points3d(cub[c(1:6,1,7,3,7,5) ,], cex = cex, type = 'b', lty = 1)
        ## hidden corner + lines
        res3d$points3d(cub[c(2,8,4,8,6),     ], cex = cex, type = 'b', lty = 3)
        if(text.)## debug
            text(res3d$xyz.convert(cub), labels=1:nrow(cub), col='tomato', cex=2)
      }
      ## 6 a) The named colors in R, i.e. colors()
      cc <- colors()
      crgb <- t(col2rgb(cc))
      par(xpd = TRUE)
      rr <- scatterplot3d(crgb, color = cc, box = FALSE, angle = 24,
          xlim = c(-50, 300), ylim = c(-50, 300), zlim = c(-50, 300))
      cubedraw(rr)
      ## 6 b) The rainbow colors from rainbow(201)
      rbc <- rainbow(201)
      Rrb <- t(col2rgb(rbc))
      rR <- scatterplot3d(Rrb, color = rbc, box = FALSE, angle = 24,
          xlim = c(-50, 300), ylim = c(-50, 300), zlim = c(-50, 300))
      cubedraw(rR)
      rR$points3d(Rrb, col = rbc, pch = 16)