COLOR(red){SIZE(20){グラフィックス参考実例集:閉多角形を描く polygon}}

([[グラフィックス参考実例集]]に戻る。[[Rのグラフィックスパラメータ]]を参照する。)~

polygon 関数は(閉)多角形を描く。
polygon 関数は(閉)多角形を描、その中を塗りつぶす(または斜線でハッチングする)関数です。以下は最も簡単な呼びだし形式です。 

 polygon(x, y)

引数xとyには多角形の頂点のx、y座標のベクトルを指定します。 xとyの代わりに、x、y成分を持つリストでも、2列の行列でも構いません。polygonは頂点を順に結び、最後に起点と終点とを結んだ多角形を描きます。頂点を指定するベクトルの途中にNAがあると、そこで一旦多角形を区切って、新たに別の多角形を描き始めます。 

引数densityによって、多角形の内部を塗りつぶすか、ハッチングするか、輪郭だけ描くかを制御できます。densityが負の値(デフォルト)なら塗りつぶします[*2]。densityが正の値ならその値を1インチ当たりの線の本数と解釈し、引数angleで指定された角度の線でハッチングします。 density=0と指定すれば、多角形の輪郭のみ描き、内部を塗りつぶしません。 

引数colに色番号を指定することによって、輪郭線と塗りつぶしに用いる色を指定することができます。NAで区切っていくつかの多角形を描く場合、多角形の個数分の長さのベクトルを指定することにより、個々の多角形に対して別々の色を用いることができます。border=Fを指定すると、多角形の輪郭を描きません。 

#contents
~
** xpd の値により枠からのはみ出しを制御
 polygon1 <- function () {
   on.exit(par(old.par <- par(no.readonly = TRUE)))
   on.exit(dev.off())
   png("polygon1.png")
   x <- c(1:9,8:1)
   y <- c(1,2*(5:3),2,-1,17,9,8,2:9)
   par(mfcol=c(3,1))
   for(xpd in c(FALSE,TRUE,NA)) {
     plot(1:10, main=paste("xpd =", xpd)) ; box("figure", col = "pink", lwd=3)
     polygon(x,y, xpd=xpd, col = "orange", lty=2, lwd=2, border = "red")
   }
 }
#ref(polygon1.png,left)

**曲線で囲まれた部分を塗りつぶす
 polygon2 <- function () {
   on.exit(par(old.par <- par(no.readonly = TRUE)))
   on.exit(dev.off())
   png("polygon2.png")
   n <- 100
   xx <- c(0:n, n:0)
   yy <- c(c(0,cumsum(rnorm(n))), rev(c(0,cumsum(rnorm(n)))))
   plot   (xx, yy, type="n", xlab="Time", ylab="Distance")
   polygon(xx, yy, col="gray", border = "red")
   title("Distance Between Brownian Motions")
 }
#ref(polygon2.png,left)

**NA 値があると多角形は分割される。col, border, lty はリサイクル使用される
 polygon3 <- function () {
   on.exit(par(old.par <- par(no.readonly = TRUE)))
   on.exit(dev.off())
   png("polygon3.png")
   par(mfrow=c(2,1))
   plot(c(1,9), 1:2, type="n")
   polygon(1:9, c(2,1,2,1,1,2,1,2,1),
           col=c("red", "blue"),
           border=c("green", "yellow"),
           lwd=3, lty=c("dashed", "solid"))
   plot(c(1,9), 1:2, type="n")
   polygon(1:9, c(2,1,2,1,NA,2,1,2,1),
           col=c("red", "blue"),
           border=c("green", "yellow"),
           lwd=3, lty=c("dashed", "solid"))
 }
#ref(polygon3.png,left)

**線でハッチング
 polygon4 <- function () {
   on.exit(par(old.par <- par(no.readonly = TRUE)))
   on.exit(dev.off())
   png("polygon4.png")
   plot(c(1,9), 1:2, type="n")
   polygon(1:9, c(2,1,2,1,NA,2,1,2,1),
           density=c(10, 20), angle=c(-45, 45))
 }
#ref(polygon4.png,left)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS