Chap6 グラフの作成
コンテンツ
6.1 はじめに6.2 2Dグラフ ( 散布図, 棒グラフ, 積み上げ棒グラフ, ヒストグラム, 箱ひげ図, 円グラフ)
6.3 関数グラフの作成
6.4 高水準作図関数 ( 散布図, ヒストグラム, QQプロット, 箱ひげ図, 時系列グラフ, 多変量データの散布図)
6.5 グラフ・パラメータ
6.1 はじめに
S-PLUSでは2つのグラフシステムを用意している。1つはGUIを用いるオブジェクト指向グラフで、もう1つは コマンドラインを用いる関数グラフ( 関数グラフの作成 )である。前者がプロット・パレートを用いて、簡単にグラフを作成できるというメリットがある。2D、3Dグラフのプロット・パレートを表示させるには、S-PLUSのメインツールバーにある、2Dプロット、3Dプロットボタンをクリックする。

S-PLUSでは、多様な2D,3Dグラフが作成できる。これから、幾つか基本の2Dグラフの作成方法を説明していく。

6.2 2Dグラフ
散布図
作成手順:
Step1: データシートを開く
Step2: Ctrlを押しながら、変数に列を選ぶ。ここで、注意するのは、S−PLUSが最初選ばれた変数の列がx軸、次に選ばれた変数の列をy軸として認識すること。

Step3: 2Dプロットパレットにある、散布図のボタンをクリックする。

散布図が表示される

棒グラフ
作成手順
Step1: データシートを開く
Step2: 散布図と同様に変数の列を選ぶ。ただ、x軸の変数のタイプが“character”であることを確認してください。

Step3: 2Dプロットパレットにある、棒グラフのボタンをクリックする。

棒グラフが表示される

x軸ではスペースが少ないので、ラベルが2行に並べられた。見栄えをよくするには:
Step1: ラベルをダブルクリックし、X Axis labelsダイアログを立ち上げる。
Step2: FontタブでRotation(回転角)を45に変更する。

ラベルが見やすくなった。

積上げ棒グラフ
作成手順
Step1: データシートを開く
Step2: Ctrlを押しながら、変数を選ぶ。

Step3: 2Dプロットパレットにある、ヒストグラムのボタンをクリックする。

積上げ棒グラフが表示される。

凡例をを作りたいなら、ツールバーの凡例自動生成ボタンをクリックすればいい。

グラフに凡例が追加された。

ヒストグラム
作成手順
Step1: データシートを開く
Step2: データを選ぶ

Step3: 2Dプロットパレットにある、ヒストグラムのボタンをクリックする。

ヒストグラムが表示される。

より細かい区間で表示したいなら、
Step1: グラフをダブルクリックし、Histogram/Density[1]ダイアログを立ち上げる。
Step2: Data to PlotタブでNumber of Barsを50に変更する。

変更後のヒストグラム

箱ひげ図
ヒストグラム用のデータを用いて、作成手順が以下のようになる。
Step1: データを選ぶ

Step2: 2Dプロットパレットにある、箱ひげ図のボタンをクリックする。

箱ひげ図が表示される。

円グラフ
作成手順
Step1: データシートを開く
Step2: 数値のデータを選ぶ

Step3: 2Dプロットパレットにある、円グラフのボタンをクリックする。

円グラフが表示される。

ここで、数値ではなくそれぞれにあたる品種名とパーセントを表示したい場合:
Step1: グラフをダブルクリックし、Pie chart[1]ダイアログを立ち上げて、Date to Plotタブのy Columnsを“製品種類”に指定する。そして、Applyをクリックする。

Step2: 同じPie chart[1]ダイアログで、LabelsタブにあるLabel2のTypeを“percent”に指定する。そして、Applyをクリックする。

ラベルが製品種類とパーセント表示に変更された。

6.3 関数グラフの作成
S言語でグラフを作成するには,作図機械とグラフ関数が必要となる.
- 作図機械:グラフの出力先(装置).例えば,グラフをPDFファイルに出力するには pdf( ) 関数を用いる.
- グラフ関数:何らかのグラフを描く関数である.例えば,ヒストグラムを描くのは hist( ) 関数用いる.
作図機器の指定
グラフを作成する前に,あらかじめ作成機器の指定が行われる.Sでは,いろいろな作図機器が用意されているが, 通常S-PLUSを起動してからのディフォルト設定が graphsheet( ) で,ユーザが特に意識しなくてもよい.このディフォルト設定が, 新たに作図機器を設定しない限りずっと有効である.現在の作図機器が何かと分からないとき, dev.cur( ) で調べることができ る.また,直接に別の装置にグラフを出力したい場合では,対象とする作図機器関数を用いて作図機器を出力可能状態に設 定すればいい.ただ単に現在の作図機器を止めたい時は, graphics.off( ) を実行する.
グラフをPDFファイルに出力する場合:
> pdf.graph(file="test.pdf", color=T) #pdfの作図機器を指定,ファイル"test.pdf" にカラーグラフを出力する > pie(rep(1, 10)) # 円グラフを描く > graphics.off( ) # pdf ディバスを止める > dev.cur() # 現在の作図機器を表示する null device 1

グラフ関数
グラフ関数は,次の2つの種類に分かれる:
- 高水準作図関数:一枚完成される図表を描くグラフ関数である.例えば,hist( ) でヒストグラムを作成することができる
.高水準作図関数で作図するとき,それまでのグラフが消去され,新しいグラフが作成される.
- 低水準作図関数:既存のグラフに点,線,タイトルなどを追加するのに用いら,図の1部
を描く.例えば,関数 title( ) で既存のグラフにタイトルを追加することができる
2種類のグラフ関数の組み合わせによって,多様なグラフを作りだすことができるのはS言語でグラフ作成の特徴とも言 える.グラフ関数はまた,グラフ・パラメータと呼ばれる特別名引数を共有しており,文字の大きさ,線分の形式など,図の細部 を変更できる.
6.4 高水準作図関数
散布図
散布図を作成するには,最もよく使われる高水準作図関数plot()を用いる.
> x = rnorm(50) > y = rnorm(50) > plot(x, y, type="p") #引数type="p"で点としてプロットする. > title("figure 1",xlab="x axis", ylab="y aixs") #タイトル, x軸,y軸ラベルを追加する.

上の例でタイトル,x軸,y軸ラベルを指定するには低水準作図関数 title( ) を用いた. 点の代わりに,線分で順に結んだプロットをするには,引数typeの値を"l"に設定すればよい.
> u = seq(0, 4*pi, by=0.05) #0から4πまでの数列を0.05おきに作る. > y = sin(u) > plot(u, y, type="l") #引数type="l"で線で結ぶ. > title("figure 2",xlab="u", ylab="sin")

2組以上のデータセットを1つの散布図に重ねて描くのはmatplot()を用いる.
> 行数=6 > 列数=2 > x=matrix(3,行数,列数) > x=col(x) #col()で行列xの要素を列番号で埋める. > y=matrix(1:12,行数,列数) > matplot(x,y)

ヒストグラム
1次元データの分布を調べるのは,hist()を用いてヒストグラムを描くことができる.
> サイコロの目 = sample(1:6, size=1000, rep=T) #sample()で数列をランダムに並び替え, サイコロの結果を作る. > hist(サイコロの目, breaks=c(0:6))

低水準作図関数lines()を用いると,既存のプロットに線分を追加することができる. 正規分布に従う乱数のヒストグラムと正規分布の密度関数を1つのグラフに描くには:
> x = rnorm(200) > hist(x, xlim=c(-6,6), ylim=c(0,0.4),prob=T) #引数xlim=,ylim=でx軸とy軸の範囲を設定する. > u = seq(-4, 4, by=0.05) > lines(u, dnorm(u)) #dnorm()で標準正規分布の確率密度関数の値を返す.

QQプロット
2組のデータが同じ分布に従っているかを視覚的に検証するためのQQプロットをqqplot(x, y )で作成することができる.2組の分布が位置と尺度は別として,類似しているならば図はだいたい直線 となる.
>x = rexp(1000) #指数分布を発生する >y = rnorm(1000) #正規分布を発生する > qqplot(x, y)

箱ひげ図
QQプロットに対して,3組以上のデータの分布を比べる際に,boxplot()で箱ひげ図を描くのは便利である.
> x = rnorm(100) > y = ruinf(100) > z = rexp(100) >boxplot(x, y, z)

時系列グラフ
plot()に引数を1つのベクトルだけ与えれば,ベクトルが時系列データとみなされ,縦軸をベクトルの要素と する時系列プロットが描かれる.ただ,複数の時系列データを1つのグラフに重ね描きたいとき,tsplot()を用いる.
>x=(1:20) >tsplot(con(x),sin(x))

多変量データの散布図
2次元のグラフで多変量データを表す1つの方法として,pairs() を使うことができる.
>pairs(iris[,,1])

6.5 グラフ・パラメータ
グラフ・パラメータは,グラフの見栄えをさまざまな観点から調整する.その指定の仕方に 2通りある:
- グラフ関数の引数として設定する.この設定がそのグラフ関数の実行中だけ有効で, 終了すればもとの値に戻る.
- 関数parを用いて設定する.この設定はすべてのグラフに有効である.再び関数parで 別の値を指定するか,グラフシートを閉じるまで変わらない.
>x = runif(10) >y = runif(10) >z = runif(10) >par(csi = 0.20) >plot(x, y, csi=0.50) >points(x, z)#0.20でインチでプロットされる.

グラフ・パラメータ自体もまた,次のように2通りに分かれる.
- 線の形式,色,線の幅,座標系など作図実体の基本的な特性.
- 複数の作図関数を,外部から共通に制御する諸特性.目盛りの位置を決定する算法,図形を 囲む余白の大きさ,図形領域の縦横比などである.
関数parを引数なしで実行すると,グラフ・バラメータの現在値を知ることができる. ここで,最もよく使われるパラメータについて説明する.
テキストとシンボル
- csi = インチ単位での文字の大きさ
- cex = 文字の拡大率
- crt = テキストを回転する角度
- adj = テキストの位置を指定する
- pch = プロットシンボル
- mkh = インチ単位でのシンボルの高さ
- col = 色
- lty = 線の種類,直線,点線,破線など
- lwd = 線の幅
軸
- bty = 箱の種類
- exp = 指数ラベルの定義
- lab = 細かい目盛り
- las = ラベルの回転
- log = プロットシンボル
- lpq = インチ単位でのシンボルの高さ
- tck = 色
グラフの軸と軸ラベルは関数axisを用いて作成することができる.
>x = runif(50) >y = runif(50) >plot(x, y, axes = F) # 軸を描かない >axis(side=1) # 1は下側,2は左側,3は上側,4は右側 >axis(side=2, pos=0) # 軸yの座標を指定する

上の例では,まず軸なしでプロットし,それから関数axisで軸を描く. 引数sideは軸を付ける位置を指定する.引数posは軸x,yの座標を指定する.
グラフマージン
1枚のグラフは,グラフの領域,4つのマージンで囲まれる作図領域から構成される. パラメータmaiをインチ単位で指定し,4つのマージンを設定する.
>x = runif(50) >y = runif(50) >par(mai = c(1, 2, 3, 4)) >plot(x, y)

複数のグラフ
複数のグラフを1つのグラフシートに作成するには,パラメータmfrowまたはmfcolを用いる. パラメータmfrowは行ごとに,mfcolは列ごとに作図する.
>par(mfrow = c(2, 3)) >plot(x) >hist(x) >boxplot(x) >boxplot(y) >hist(y) >plot(y)
