Rでデータ解析を始めよう018 正多角形を作図して複数のグラフにプロットする方法

Rでデータ解析を始めよう018 正多角形を作図して複数のグラフにプロットする方法

モモノキ&ナノネと一緒に統計ソフトRの使い方を学習していきます。

モモノキ&ナノネと一緒にRでグラフを作成しよう




正多角形を作図して複数のグラフにプロットする方法

ナノネ、統計解析用フリーソフト『R』の使い方を練習するよ。今回はグラフで正多角形を描いてみよう。

正三角形、正四角形、正五角形とかをグラフで描くだけ?あんまり面白そうじゃないね。

グラフの作図練習になるからやってみよう。

ラジャー。正多角形はどうやってグラフで描くの?

角度をもとに円周上の頂点座標を求めれば、あとは簡単に描画できるよ。

In [37]:
# 正n角形の頂点表示
n = 5 # 正n角形
r = 1 # 半径

plot(c(-r, r), c(-r, r), type="n", asp=1, xlab="", ylab="")
theta <- seq(0, 2 * pi, length = n + 1)
theta <- theta[1:(n)]

x <- r * cos(theta)
y <- r * sin(theta)
text(x, y, 1:n)

# 円(ガイド線表示)
theta.c <- seq(0, 2*pi, length=100)
points(cos(theta.c), sin(theta.c), type="l", asp=1, col="gray")

頂点の座標が計算できれば、あとはpolygonにおまかせできそう。

In [38]:
# 正n角形の頂点表示
n = 5 # 正n角形
r = 1 # 半径

plot(c(-r, r), c(-r, r), type="n", asp=1, xlab="", ylab="")
theta <- seq(0, 2 * pi, length = n + 1)
theta <- theta[1:(n)]

x <- r * cos(theta)
y <- r * sin(theta)
polygon(x, y, col="skyblue")

# 円(ガイド線表示)
theta.c <- seq(0, 2*pi, length=100)
points(cos(theta.c), sin(theta.c), type="l", asp=1, col="gray")

正五角形の完成!

In [39]:
# 正n角形の頂点表示
n = 12 # 正n角形
r = 1 # 半径

plot(c(-r, r), c(-r, r), type="n", asp=1, xlab="", ylab="")
theta <- seq(0, 2 * pi, length = n + 1)
theta <- theta[1:(n)]

x <- r * cos(theta)
y <- r * sin(theta)
polygon(x, y, col="skyblue")

# 円(ガイド線表示)
theta.c <- seq(0, 2*pi, length=100)
points(cos(theta.c), sin(theta.c), type="l", asp=1, col="gray")

正12角形も描画してみた。何角形でもいけそう。

関数にしておいた方が便利かもよ。

In [35]:
regularPolygon <- function(n, r=1, cx=0, cy=0, tilt=pi/2, tx=TRUE) {
    x <- c(cx - r*1.2, cx + r*1.2)
    y <- c(cy - r*1.2, cy + r*1.2)
    plot(x, y, type="n", asp=1, xlab="", ylab="", main=sprintf("%s-reg.polygon", n))
    
    theta <- seq(0, 2 * pi, length = n + 1) + tilt 
    theta <- theta[1:length(theta)-1]
    px <- r * cos(theta) + cx 
    py <- r * sin(theta) + cy 
    polygon(px, py, col="limegreen", lwd=2) # 多角形の描画

    if(tx){
        tx <- (r*1.1) * cos(theta) + cx 
        ty <- (r*1.1) * sin(theta) + cy 
        text(tx, ty, 1:n, cex=0.8) # テキストの描画
    }
}

できた。関数の引数に角数を指定すれば正n角形が描画できる。オプションで半径、位置、傾斜、番号表示なども変更できるようにしてみた。

In [33]:
regularPolygon(8)

関数を使えば複数プロットも簡単だよ。試しにグラフを9個一度に描いてみるよ。

In [36]:
N = 9 # グラフの数
n = ceiling(sqrt(N))
layout(matrix(1:n^2, ncol=n, byrow=T))
invisible(lapply(3:(N+2), regularPolygon)) # 3~(N+2)角形を描画

三角形から11角形まで一度にプロットできて便利かも。

正多角形の作図練習は以上で。
またね!





スポンサーリンク

0 件のコメント :

コメントを投稿