スタートページJavaScript他言語R言語

グラフ(リファレンス)

Rとグラフ:概要
Rはグラフ作成に便利な言語です。本章はグラフ作成のイントロダクションとして基本的な機能を示すとともに、実際にグラフ作成でのリファレンスとして用いることを目的としています。
グラフ作成用のデータ形式
グラフには、散布図や折線グラフのように、X軸のデータの数値が不等間隔の場合と、棒グラフのようにX軸は等間隔であり、数値としての意味はなく質的データの場合があります。それらによりグラフ作成のためのデータ形式が異なります。その整理をします。
オプション機能の説明と実例を示します。

Rとグラフ

Rは、簡単な記述でグラフを描く機能をもっています。下左のようなシンプルなグラフならば、次の plot() だけでよいのです。

    x <- c(-2, -1, 1, 3, 5, 6)   # X軸の値
    y <- c(-1,  3, 1, 4, 3, 5)   # Y軸の値
    plot(x, y, type='b')         # グラフ表示

しかも、多様なオプション機能があり、右上のように加工することもできます。

実際のグラフ作成は、別章で取り扱います。ここでは、そのための基本事項を示すこと、実際に作図するときのリファレンスとして用いることを目的とします。

下記の青線の部分をGoogle Colaboratryの「コード」部分にコピーアンドペースト(ペーストは Cntl+V)して実行すれば、右図の画像が表示されます。

Rでの作図関数は、次の3つに区分されます。

高水準作図関数
plot()(散布図、折線グラフや barplot() (棒グラフ)のように、これだけでグラフが作図できる関数です。多くの関数がありますが、ここではよく用いられるものを対象にします。しかも、本章では barplot あるいは plot を例として用いるだけです。
  棒グラフ barplot
    積上げ棒グラフ  barplot
    並列棒グラフ barplot
      水平棒グラフ barplot
    ヒストグラム  hist
  散布図 plot
  折線グラフ plot
    複数折線グラフ matplot
    曲線グラフ curve
低水準作図関数
高水準作図関数で作成したグラフにグリッドや凡例を付加して体裁を整えるための関数です。他人に見せるグラフにするときに有用です。実際にはグラフを見ながら試行錯誤でパラメタを変える作業になります。本章ではこれが中心になります。
対話的作図関数
グラフをクリックして、グラフの座標やデータ番号などを取得する関数です。低水準作図関数のパラメータを設定したり、グラフを検討するときの補助機能です。

グラフ用のデータ

基本的な考え方

ここでは、次のグラフを対象にします。
  タイプA:X軸が数値の折線グラフ/散布図(Xデータは不等間隔)
  タイプB:国比較のように、X軸が等間隔の折線グラフ
  タイプC:棒グラフ/横棒グラフ。X軸目盛りが後述の A, B, … などの要素であるもの
  タイプD:棒グラフ/横棒グラフ。X軸目盛りが後述の y1, y2 などの系列であるもの

X軸の目盛り

常識的には、
x <- c(-2, -1, 1, 3, 5, 6) # X軸の値
y <- c(-1, 3, 1, 4, 3, 5) # Y軸の値
のように、点(x,y) の組を与えますが問題があります。

タイプAの折線グラフのように、X軸の値が x の数値が意味がある場合は、これでよいのですが、タイプC・Dの棒グラフの場合は、
  x <- c('A','B','C','D','E','F')
のように質的データですので、棒の位置を決定することはできません。それで barplot では、x <- c(1,2, … ) が指示された(x軸非指定)として、棒の位置を等間隔として1.2,… のように連番を付けます。タイプC・Dでは、
  names(y) <- c('A','B','C','D','E','F') 
   複数系列のときは タイプC:colnames(m) <- c("A","B",…)、タイプD:colnames(m) <- c("y1","y2",…)
のようにyデータの付随情報として与えるのです。

折線グラフでも、タイプDでは、国別比較のようにX軸が質的データの場合があります、plot (複数系列のときは matplot)では names として扱う機能をもっていません。そのため plot ではX軸目盛りを非表示にしておき、グラフ作成後に(別途に axis関数を用いて)X軸目盛りを表示する必要があります。

複数系列でのY軸データ

Y軸データが一系列のときは、 y はベクトルであり、縦ベクトルでも横ベクトルでも構いません。
複数系列の場合は、次の考慮が必要になります。

             A   B   C   D   E   F       要素
    y1 <- c( 4,  2,  6,  4,  5,  4)   系列
    y2 <- c( 5,  6,  4,  5,  3,  5)   系列

上のデータがあるとき、matplot(複数折線グラフ)や barplot(棒グラフ)で matplot(y1,y2,…) のように複数のデータを列挙することはできません。
y1, y2 を二次元配列 m にまとめて matplot(m) としなければなりません。

このとき、結合には2つの形式があります。

  タイプC          タイプA・B・D

  横ベクトルの結合        縦ベクトルの結合
  m <- rbind(y1,y2)           m <- cbind(y1,y2)
                                  y1  y2
    y1: 4 2 6 4 5 4         4   5
    y2:  5  6  4  5  3  5         2   6
                                  6   4
                                  4   5
                                  5   3
                                  4   5

次のように列ベクトルでもっていることもあります。

    m <- matrix(c(-2, -1,       #  m[1, ] = -2, -1      m[ ,1] = -2, -1, -1, 1, 3, 5, 6
                  -1,  3,       #  m[2, ] = -1,  3      m[ ,2] = -1,  3, 1, 4, 3, 5
                   1,  1,
                   3,  4,
                   5,  3,
                   6,  5),
                nrow=6, byrow=T)
    plot(m[ , 1], m[ , 2])              # 正しい
    barplot(m[ , 1], m[ , 2])           # 期待しないグラフになる

タイプA:複数折線グラフ/散布図(Xが数値)

    縦ベクトルの結合
    m <- cbind(y1,y2)
        y1  y2
         4   5
         2   6
         6   4
         4   5
         5   3
         4   5


●個別の横ベクトルで与える

x  <- c(2, 2.5, 5, 6, 6.5, 8) 
y1 <- c(4, 2,   6, 4, 5,   4)
y2 <- c(5, 6,   4, 5, 3,   5)

m <- cbind(y1, y2)             # c(y1, y2) は不可
matplot(x, m, type="b",
    pch=16, cex=2, lty=1, col=c("red", "blue"))

●縦マトリクスで与える
x <- c(2, 2.5, 5, 6, 6.5, 8)
m <- matrix(c(4, 5,            # 縦ベクトル
              2, 6,
              6, 4,
              4, 5,
              5, 3,
              4, 5),
           nrow=6, byrow=T)

matplot(x, m, type="b",
    pch=16, cex=2, lty=1, col=c("red", "blue"))

●横マトリクスで与える
x <- c(2, 2.5, 5, 6, 6.5, 8) 
m <- matrix(c(4, 2, 6, 4, 5, 4,
              5, 6, 4, 5, 3, 5),
           nrow=2, byrow=T)

t(m)          # m のままだとエラー 転置行列で縦マトリクスに変換

matplot(x, t(m), type="b",
    pch=16, cex=2, lty=1, col=c("red", "blue"))

●X軸データも横マトリクスで与える
m <- matrix(c(2, 2.5, 5, 6, 6.5, 8,
              4, 2,   6, 4, 5,   4,
              5, 6,   4, 5, 3,   5),
           nrow=3, byrow=T)

x <- m[1, ]
y <- cbind(m[2, ], m[3, ])

matplot(x, y, type="b",
    pch=16, cex=2, lty=1, col=c("red", "blue"))

●X軸データも縦マトリクスで与える
m <- matrix(c(2,   4, 5,
              2.5, 2, 6,
              5,   6, 4,
              6,   4, 5,
              6.5, 5, 3,
              8,   4, 5),
           nrow=6, byrow=T)

x <- m[ ,1]
y <- m[ ,c(2,3)]

matplot(x, y, type="b",
    pch=16, cex=2, lty=1, col=c("red", "blue"))


●データフレームで与える
df <- data.frame(                                 #       c1   c2  c3 ← 列名
          c1 = c(2, 2.5, 5, 6, 6.5, 8),         #   1   2    4   5
            c2 = c(4, 2,   6, 4, 5,   4),         #   2   2.5  2   6
            c3 = c(5, 6,   4, 5, 3,   5))         #   3   5    6   4
                                                  #   4   6    4   5
                                                  #   5   6.5  5   4
                                                  #   6   8,   4   5
                                                  #   └行番号
x <- df$c1
y <- df[c("c2", "c3")]     # cbind(df$c2, df$c3) でもよい。c(df$c2, df$c3) ではエラー

matplot(x, y, type="b",
    pch=16, cex=2, lty=1, col=c("red", "blue"))

タイプB:複数折線グラフ(質的X軸)

X軸を与えないで等間隔の折線グラフを描かせ、その後で axis関数によりX軸目盛りを描きます。

●エラー(文法エラー)
x  <- c("A","B","C","D","E","F")  # 質的X軸
y1 <- c( 4,  2,  6,  4,  5,  4)
y2 <- c( 5,  6,  4,  5,  3,  5)

m <- cbind(y1, y2)
matplot(x, m, type="b",          # xは非数値などでエラー
    pch=16, cex=2, lty=1, col=c("red", "blue"))

●エラー(X軸が 1,2, … のまま)
y1 <- c( 4,  2,  6,  4,  5,  4)
y2 <- c( 5,  6,  4,  5,  3,  5)

m <- cbind(y1, y2)
colnames=c("A","B","C","D","E","F") # matplot では無意味

matplot(m, type="b",
    pch=16, cex=2, lty=1, col=c("red", "blue"))


●正しくX軸目盛りを文字にする axis
y1 <- c( 4,  2,  6,  4,  5,  4)
y2 <- c( 5,  6,  4,  5,  3,  5)

m <- cbind(y1, y2)

matplot(m, type="b",
    pch=16, cex=2, lty=1, col=c("red", "blue"),
    xaxt="n")                           # 以下でX軸目盛りを設定するので、非表示にする

axis(side=1,                            # X軸を対象
     at=c(1:6),                           # 目盛りを付ける位置(省略時の 1, 2,… の位置)
     labels=c("A","B","C","D","E","F"))   # 目盛り文字列

タイプC:複数棒グラフ/複数水平棒グラフ(要素)

積上げ棒グラフも並列複数棒グラフも同じです。

  横ベクトルの結合
  m <- rbind(y1,y2)
         A  B  C  D  E  F  ←   要素
    y1: 4 2 6 4 5 4 ┬─ 系列
    y2:  5  6  4  5  3  5 ┘

barplot(m)             積上げ棒グラフ
barplot(y,  beside=T)       並列棒グラフ
barplot(m,  byrow=T)         水平積上げ棒グラフ
barplot(y,  beside=T, byrow=T)   水平並列棒グラフ

● エラー
x  <- c("A","B","C","D","E","F") 
y1 <- c( 4,  2,  6,  4,  5,  4)
y2 <- c( 5,  6,  4,  5,  3,  5)
・・・
barplot(x, y) # xが数値でないのでエラー


●系列ごとにベクトルで与える
y1 <- c( 4,  2,  6,  4,  5,  4)
y2 <- c( 5,  6,  4,  5,  3,  5)

m <- rbind(y1, y2)     # 下記(注)参照
colnames(m) <- c("A","B","C","D","E","F")  # colnames(y1) は不可 

barplot(m)

----------(注)
m <- c(y1, y2)        # 12本の棒 
m <- cbind(y1, y2)   # 2本の棒  X軸は "y1","y2"
m <- rbind(y1, y2)   # 6本の棒  X軸は表示されない
----------


●Yデータをマトリクスで与える
(Xデータは文字なので、一緒にはできない)
m <- matrix(c(4, 2, 6, 4, 5, 4,
              5, 6, 4, 5, 3, 5),
           nrow=2, byrow=T)

colnames(m) <- c("A","B","C","D","E","F")

barplot(m)


●データフレームで与える
df <- data.frame(                                 #       c1  c2  c3 ← 列名
          c1 = c("A","B","C","D","E","F"),      #   1   A   4   5
            c2 = c(  4,  2,  6,  4,  5,  4),      #   2   B   2   6
            c3 = c(  5,  6,  4,  5,  3,  5))      #   3   C   6   4
                                                  #   4   D   4   5
                                                  #   5   E   5   4
                                                  #   6   F   4   5
                                                  #   └行番号
m <- rbind(df$c2, df$c3)
colnames(m) <- df$c1

barplot(m)

タイプD:複数棒グラフ(系列)

    縦ベクトルの結合
    m <- cbind(y1,y2)
        y1  y2
         4   5
         2   6
         6   4
         4   5
         5   3
         4   5
●系列別の横ベクトルで与える
y1 <- c( 4,  2,  6,  4,  5,  4)
y2 <- c( 5,  6,  4,  5,  3,  5)

y <- cbind(y1, y2)

barplot(y)

●縦ベクトルのマトリクスで与える
m <- matrix(c(4, 5,                   # 縦ベクトル
              2, 6,
              6, 4,
              4, 5,
              5, 3,
              4, 5),
           nrow=6, byrow=T)

colnames(m) <- c("y1","y2")

barplot(m)

●データフレームで与える

df <- data.frame(                                 #       c1  c2  c3 ← 列名
          c1 = c("A","B","C","D","E","F"),      #   1   A   4   5
            c2 = c(  4,  2,  6,  4,  5,  4),      #   2   B   2   6
            c3 = c(  5,  6,  4,  5,  3,  5))      #   3   C   6   4
                                                  #   4   D   4   5
                                                  #   5   E   5   4
                                                  #   6   F   4   5
                                                  #   └行番号
y <- cbind(df$c2, df$c3)
colnames(y) <- c("y1", "y2")

barplot(y)

高水準作図関数のオプション

plot() と barplot() の主なオプションを列挙します。グラフの性格上、一方にしか使えないものもありますが、適当に判断してください。

    plot(y, オプション)         barplot(y, オプション)
    plot(x,y, オプション)      barplot(x,y, オプション)

オプションは、option1=aaa, option=bbb のように与えます。順序は自由です。
例えば棒グラフの色指定のように、複数の要素について指定する場合には option=c(aa1, aa2, …) のようにリスト形式で与えられるオプションもあります。リスト数が少ないときは、リストが繰り返し与えられたことになります。

# 表示範囲
  xlim=c(xmin,xmax)、ylim=c(ymin,ymax) 表示範囲の指定
    asp=1 目盛り間の縦横比(curveのとき有効)
# 点と線
    type='p'   plotのタイプ: 'p'(点のみ、デフォルト)、'l'(線のみ), 'b' (点と線)、'q'(点と線の重ね書き)、

    pch=0    点の形状:□ 1 〇(デフォルト) 2 △ 3 + 4 × 5 ◇ 15 ■ 16 ● 17 ▲ 18 ◆
               pch='文字' →散布図での列名の表示

    cex=1      点の大きさ

    col=1      点・線・棒の色 1 'black' rgb(0,0,0), '\#FFFFFF' (デフォルト)
            2 'red'  3 'green'  4 'blue'  5 'aqua'  6 'purple' 7 'yeellow' 8 'gray'

    lty=1      線の形状 1 'solid' 実線(デフォルト)  2 'dashed' 短線 3 'dotted' 点線 3 'dotdash' 鎖線

    lwd=1    線の太さ

# タイトル グラフの上に表示される
    main="TITLE",             # タイトル
    cex.main=3,               # 文字サイズ
    col.main="red",           # 色

# 軸ラベル
    xlab='身長', ylab='体重'  # 軸ラベル 非表示にするには xlab='' とする
    cex.lab=2                 # 軸ラベルの文字の拡大率
    col.lab="blue"
    font.lab=1                # 軸ラベルのフォント 1 プレーンテキス 2 ボールド 3 イタリック 4 ボールドイタリック

# 軸の目盛り  y=0, x=0 の線ではなく、グラフの下・左に表示される。負のデータがあるときに注意
    cex.axis=1.5,             # 軸目盛りの文字の拡大率
    col.lab="blue"
  xaxt='n', yaxt='n'     # 軸目盛の非表示

plotでの実例

x <- c(-2, -1, 1, 3, 5, 6)   # X軸の値
y <- c(-1,  3, 1, 4, 3, 5)   # Y軸の値
plot(x, y,
    type='b',        # 折線グラフ
    xlim=c(-4, 8),   # 表示範囲
    ylim=c(-2, 6),   #
    pch=2,           # 点は△
    cex=4,           # 点のサイズ
    col='red',       # 点の色
    lty=1,           # 線は実線
    lwd=2,           # 線の太さ
    cex.lab=2,       # 軸ラベルの大きさ(拡大率)
    cex.axis=1.5,    # 軸見出しの大きさ
    col.lab="blue",  # 軸ラベルの色
    xlab='x-axis',   # X軸
    ylab='y-axis'    # Y軸
)

日本語の表示をする方法もあるらしいのですが、どうもうまくいきませんでした。


低水準作図関数による体裁

低水準作図関数とは、高水準作図関数で作成したグラフの体裁を整える機能を提供します。その主なものを掲げます。

ここでのオプションは、高水準作図関数のオプションと共通しているものが多いです。例えば線を引く関数のパラメタでは、lty(線のタイプ)、lwd(線の太さ)、col(線の色)などが指定できますし、文字に関する関数では、pch(文字の大きさ)、cex(文字の拡大率)、col(色)、font(フォント)などが指定できます。
ここでは、主に関数独自のオプションを示します。また、用途により分類していますので、同じ関数が散在して出現することがあります。

説明はかなり舌足らずです。ひな形を下記の青線の部分をGoogle Colaboratryの「コード」部分にコピーアンドペースト(ペーストは Cntl+V)して実行すれば、表示した画像が表示されます。それを適宜変更して確認してください。ベースは範囲だけをで何のグラフもない
   plot(c(-2, 6), c(-1, 5), type="n", xlab="", ylab="")
を設定しています。

線関連

# 〓〓〓 グラフ全体
    box(lwd=2, fill=T, col="gray")    #  図形領域をgrayで塗りつぶす
                     # 注意:グラフ作成以前に指定する
    par(new=T)                        #       グラフ作成で消去されっるのを防ぐ

# 〓〓〓 線

# 格子線
    # 格子線だけを引く(軸線参照)
    abline(h=seq(ymin, ymax, dy), # 等間隔にX軸の平行線 グラフ下の目盛りは消える
         lty="dotted",            # 点線
         col="gray")              # 灰色
    # グラフ下(X軸ではない)に目盛りも書き込む
    axis(side=1,                  # 1 水平線 2 垂直線  
         at=seq(xmin, xmax, dx),  # 目盛り点の設定 abline とは x-yが異なる
         lty="dotted",            # 点線
         col="gray")              # 灰色

# 軸線
    axis(side=1,… )              # 軸線を引く side=1 X軸、2 Y軸
    abline(h=y,… )               # y=0 ならX軸、値を変えることによりX軸の平行線
    abline(v=x,… )               # x=0 ならY軸、値を変えることによりY軸の平行線

    axis(side=1,
         at=seq(xmin, xmax, dx),  # at は目盛り点の設定
         pos=0,                   # y=0 にX軸を引く
         lwd=2,                   # 軸線の太さ
         col="blue",              # 軸線の色
         cex.axis=1.5,            # 目盛りの拡大率
         col.axis="blue"          # 目盛りの色
         las=0)                   # 目盛りの表示方向 X軸なら省略、Y軸なら2が一般的
                                  # 0 各軸に並行、1 すべて水平、2 軸に垂直、3 すべて垂直
# 任意の直線
    segments(x0,y0, x1,y1)        # (x0,y0) と (x1,y1) を結ぶ線分 
    arrows(x0,y0, x1,y1)          # 矢印

    lines(x=c(x1, x2, … ),       # (x1,y1) - (x2,y2) - の点を折線で結合
     y,c(y1, y2, … ),
          lwd, ity )

    abline(b,a)                   # y=ax+b の線

線関連の例

plot(c(-2, 6), c(-1, 5), type="n", xlab="", ylab="")
# 格子線
axis(side=1,          #  水平線
     at=seq(-2, 6, 1),  # 目盛り点の設定
     lty="dotted",      # 点線
     col="gray")        # 灰色
axis(side=2,          # 垂直線
     at=seq(-2, 6, 1),
     lty="dotted",
     col="gray")
# 軸線
abline(h=0,           # X軸
    lwd=2,              # 線の太さ
    col="blue")         # 線の色
abline(v=0,           # Y軸
    lwd=2,
    col="blue")
# 任意の直線
lines(x=c(-1, 5), y=c(-1, 5),
    lwd=4,
    col="red")

文字関連

ここでの軸ラベルや軸目盛りは plot関数のオプションとしても設定できます。ここで軸ラベルや軸目盛りを設定する場合、plot関数でそれらを表示していると重ねて表示されるので、plot でのオプションで、xlab='' や yaxt='n' のように、これらを非表示にする必要があります。

# 〓〓〓 文字

# タイトルと軸ラベル
    title(main="タイトル",        # 上部余白に表示
          col.main="red",            # タイトルの色
          cex.main=4,              # タイトルの色
          sub="サブタイトル",     # 下部余白に表示
          xlab="X軸ラベル",
          ylab="y軸ラベル",
          cex.lab=2)              # 軸ラベルの拡大率

# 軸目盛り(軸と重複)
    # 軸と目盛りだけ
    axis(side=1,                  # 1 X軸、2 Y軸
         at=seq(xmin, xmax, dx),  # 
         pos=0)                   # 軸の位置

    # 格子線も引く(格子線と重複)
    axis(side=1,
         at=seq(xmin, xmax, dx), 
         tcl=1,
         pos=0)

# 任意位置の文字列挿入
    text(x,y, 文字列,
         pos=1,                    # (x,y) からの相対位置 1=下, 2=左, 3=上, 4=右
         offset=2,                 # その微調整
         srt=30,                   # 角度 水平なら省略
         col="red", cex=2)         # 色や大きさなど

文字関連の例

plot(c(-2, 6), c(-1, 5), type="n",
     xlab="", ylab="", xaxt="n", yaxt="n")        # 軸グラフと軸目盛りを非表示にした

# 格子線だけを引く
abline(h=seq(-1, 5, 1),  lty="dotted") 
abline(v=seq(-2, 6, 1),  lty="dotted") 

# 軸目盛り
axis(side=1,              # X軸目盛り
     at=seq(-2, 6, 1),        # xmin, xmax. dx
     pos=0,                   # y=0 をX軸とする
     cex.axis = 1.5,          # 目盛り文字の大きさ1.5倍(Y軸目盛りと比較せよ)
     col.axis="blue")

axis(side=2,               # Y軸目盛り
     at=seq(-1, 5, 1),        # ymin, ymax. dy
     pos=0,                   # x=0 をY軸とする
     col="blue")

# タイトルと軸ラベル
title(main="title",        # タイトル グラフ上に表示
      col.main="red",         # 文字の色
      cex.main=4,             # 文字の大きさ
      xlab="x-axis",       # X軸ラベル
      ylab="y-axis",       # Y軸ラベル
      cex.lab=2)

# 任意位置の文字列挿入
text(0,4, "aaaaa", cex=2)                      # 点が文字の中心
text(0,3, "bbbbb", cex=2, pos=1)               # 点の下側
text(4,3, "ccccc", cex=2, pos=2)               # 点の左側
text(0,2, "ddddd", cex=2, pos=3)               # 点の上側
text(4,2, "eeeee", cex=2, pos=4)               # 点の右側
text(0,1, "fffff", cex=2, pos=1, offset=2)     # 点の下に2だけあけた下側
text(4,1, "ggggg", cex=2, pos=2, offset=2)     # 点の左に2だけあけた左側

図形関連

グラフに図形を書きこむとき、地のグラフが図形の裏になります。それでは不都合で防ぐには、
まず、plot(c(-2, 6), c(-1, 5), type="n", xlab="", ylab="", xaxt="n", yaxt="n") のようにサイズだけを指定したグラフを作る。
次に、この図形表示や線・文字を書き込む。この順はどちらが全面になるかによる。
これに本来のグラフを重ねるために、 par(new=T) を指定します。
本来のグラフを描きます。

# 〓〓〓 図形

# 点
    points(x,y, type="p",
        plotの点のパラメタに準ずる)        
        
# 矩形
    rect(x0,y0,  x1,y1.
         border="black",           # 枠線の色
         col="red")                # 塗りつぶしの色

# 多角形
    polygon(x=c(x1,x2,…), y=c(y1,y2,…),
         矩形のパラメタに準ずる)

図形関連の例

plot(c(-2, 6), c(-1, 5), type="n", xlab="", ylab="")
# 格子線
axis(side=1, at=seq(-2, 6, 1),  lty="dotted")
axis(side=2, at=seq(-1, 5, 1),  lty="dotted")

# 点
points(-1,4, type="p")            # デフォルト
points(3,4, type="p",
      pch=15,                     # ■
      cex=4,                      # 点の拡大率
      col="red")                  # 点の色(□なら塗りつぶしなし)
# 矩形
rect(-1,3, 1,2)                   # デフォルト  
rect(3,3, 5,2,
    border="blue",                # 枠の色
    col="yellow")                 # 塗りつぶしの色
# 多角形
polygon(x=c(-1,1,0), y=c(1,1,0))  # デフォルト
polygon(x=c(3,5,4), y=c(1,1,0),
    border="blue",
    col="yellow")

凡例

凡例のグラフ内表示

plot や barplot などの内部で凡例の記述ができます。手軽ですが、細かい指定はできません。
# 凡例 legend() 関数

    legend("topleft",              # 表示位置 下記参照
          ncol=2                   # 1行に表示する系列数 省略時は1

          legend=c("系列1", … ), # 凡例の系列の名称(配列) 
       text.col=c("red", … ),  # 凡例の文字色(text.cex はエラーになる)
          cex=2,                   # 凡例内全体(文字や線)拡大率(ptも含む)
                                   # (後に pt.cex で点の大きさを指定するので文字列だけに適用)

          pch=c(1, … ),           # 点の形  matplot で指定したのと同じにする
                                   # (棒グラフのときは pch=15 ■で軸の代用にする)                                   
          lty=c(1, … ),           # 線の形 棒グラフでは不要  matplot で指定したのと同じにする
          col=c("red","blue"),     # 点・線の色  matplot で指定したのと同じにする
          pt.cex=2                 # 凡例内の点だけの拡大率

          text.width=1.5           # 凡例内の文字部分の幅拡大
          bty = "n"                # 凡例枠線を非表示
          box.lwd=3,               # 凡例枠線の太さ
          box.lty=3,               # 枠線のタイプ
          box.col="green",         # 枠線の色
          bg="yellow")             # 凡例領域の背景

       # 表示位置
           # "topleft"    "top"    "topright"
           # "left"       "center" "right"
           # "bottomleft" "bottom" "bottomright"

単純な凡例

# 入力データ
x  <- c(-2, -1, 1,  3, 5, 6)   # X軸の値
ya <- c(-1,  3, 1,  4, 3, 5)   # Y軸 A系列
yb <- c( 3,  5, 2,  0, 2, 4)   # Y軸 B系列    
y <- cbind(ya, yb)

# グラフ
matplot(x, y, type="b",
        col=c("red","blue"),   # ┐
        pch=c(15, 16),         # │
        cex=c(2, 3),           # ├ 一致
        lty=1,                 # │
        lwd=c(2, 4))           # ┘

# 凡例
legend("bottomright",          # 表示位置

        legend=c("ya", "yb"),  # 系列文字列
        cex=1.5,               # とりあえず全体の拡大(結果は文字列だけに適用)
        text.col="black",      # 文字列の色

        col=c("red","blue"),   # ┐
        pch=c(15, 16),         # │
        pt.cex=c(2, 3),        # ├ 一致(文字への適用を防ぐために pt.を付ける))
        lty=1,                 # │
        lwd=c(2, 4))           # ┘

凡例にオプション追加

# 入力データ
x  <- c(-2, -1, 1,  3, 5, 6)   # X軸の値
ya <- c(-1,  3, 1,  4, 3, 5)   # Y軸 A系列
yb <- c( 3,  5, 2,  0, 2, 4)   # Y軸 B系列    
y <- cbind(ya, yb)

# グラフ
matplot(x, y, type="b",
        col=c("red","blue"), pch=c(15, 16), cex=c(2, 3), lty=1, lwd=c(2, 4)) 

# 凡例
legend("bottomright",
        legend=c("ya", "yb"), cex=1.5, text.col="black", 
        col=c("red","blue"), pch=c(15, 16), pt.cex=c(2, 3), lty=1, lwd=c(2, 4),
                  #ここまでは前と同じ 以降を追加
        box.lwd=2,                  # 凡例枠線の太さ
        box.lty=1,                  # 枠線のタイプ
        box.col="green",            # 枠線の色
        bg="yellow")                # 凡例領域の背景

棒グラフの凡例

積上げ棒グラフでは、グラフの順序と凡例の順が逆になります。series2 のほうを前にしたほうがよいでしょう。

m <- matrix(c(4, 2, 6, 4, 5, 4,    # series1
              5, 6, 4, 5, 3, 5),   # series2
             ncol=6, byrow=T)
colnames(m) <- c("c1","c2","c3","c4","c5","c6")

barplot(m, col=c("red","blue"))

# 凡例
legend("bottomright",
        legend=c("series1", "series2"),
        cex=2,                      # 凡例全体の拡大率
        text.col="black",
        pch=15.                     # 軸を■で代用
        col=c("red","blue"))

凡例のグラフ外表示

グラフ外凡例のルール

グラフの外側に余白を確保する必要があります。
グラフを作成する前に宣言します。
    par(mar=c(10,1,4,13))     # グラフ外側の余白:底辺,左側,上側,右側の順

グラフの外側に表示することを許す必要があります。
グラフ作成後、凡例を作成する前に記述します。
    par(xpd=TRUE)    

凡例の左上をグラフ枠との位置で指定できます。
    par()$usr[p]+n
       # p:グラフ枠 1 左、2 右、3 下、4 上
       # n:補正:上・右への変位
     # 例 par()$usr[2]+0.5, par()$usr[3]+1,
     #    par()$usr[3]+1, par()$usr[2]+0.5, としても同じ
     #   グラフの右・下端から、右に0.5、上に1移動した点に凡例の左上端を合わせる

例示

par(mar=c(10,1,4,13))     # グラフ外側の余白:底辺,左側,上側,右側の順

plot(0,0, xlim=c(1,5), ylim=c(1,5))

par(xpd=TRUE)             # グラフの外側の表示を許す

legend(par()$usr[1], par()$usr[3], legend="legend(1,3)")
legend(par()$usr[1], par()$usr[4], legend="legend(1,4)")
legend(par()$usr[2], par()$usr[3], legend="legend(2,3)")
legend(par()$usr[2], par()$usr[4], legend="legend(2,4)")
legend(par()$usr[1], par()$usr[3]-0.5, legend="legend(1,3-0.5)")
legend(par()$usr[1], par()$usr[4]+0.5, legend="legend(1,4+0.5)")
legend(par()$usr[2]+0.5, par()$usr[3]+1, legend="legend(2+0.5,3+1)")


全体を通した画像体裁の例

冒頭に掲げた「簡単な例」を、いろいろなオプションで体裁を整えます。しかし「凝った」ものではなく、通常行うような程度にします。
パラメタを変えて試してください。

x <- c(-2, -1, 1, 3, 5, 6)   # X軸の値
y <- c(-1,  3, 1, 4, 3, 5)   # Y軸の値

# 折線グラフ
plot(x, y, type='b',       # 折線グラフ
    pch=16,                  # 点の形状 ●
    cex=2,                   # 点の大きさ
    col="red",               # 点・線の色
    lty=1,                   # 線は実線
    lwd=2,                   # 線の太さ

    main="TITLE",          # タイトル
    cex.main=3,              # 文字拡大率
    col.main="red",           # 色
    xlab="x-axis",         # 軸ラベル
    ylab="y-axis",
    cex.lab=2,               # 文字拡大率
    col.lab="blue",
    xaxt="n",              # 目盛り グラフの下(X軸ではない)に表示されるのを非表示にする
    yaxt="n")

# 格子線
abline(h=seq(-1, 5, 1),    # 目盛り点の設定
     lty="dotted")           # 点線
abline(v=seq(-2, 6, 1),
     lty="dotted")
# 軸線
axis(side=1,               # X軸
     pos=0,                  # y=0 の位置
     at=seq(-2,6,1),         # xmin, xmax, dx
     lwd=2,                  # 軸の太さ
     col="blue",             # 軸の色
     cex.axis=1.5,           # 目盛り文字拡大率
     col.axis="blue")        # 目盛り文字の色
axis(side=2,
     pos=0,
     at=seq(-1,5,1),
     las=2,
     lwd=2,
     col="blue",
     cex.axis=1.5,
     col.axis="blue")
 # 凡例
legend("bottomright",       # 凡例を右下に表示
       legend="y",            # 系列名
       pch=16,                # 点の形状  ┐
       lty=1,                 # 線のタイプ ├ plot での設定と同じにする
       col="red",             # 線・点の色 ┘
       cex=1.5)               # 凡例全体の拡大率
# 任意の直線
lines(x=c(-2,6),y=c(0,4),   # 斜めの点線
      lwd=4,                  # 線の太さ
      lty="dotted")           # 線のタイプは点線
# 任意文字列
text(3,2,                   # 斜めの文字列
    "Regression Line",        # 文字列
    cex=1.5,                  # 文字拡大率
    srt=30)                   # 角度