Bam's blog

学んだこと。思ったこと。綴ります。

R:円グラフを描こう

1. データの準備

今日はデータセットの中からいい感じのデータが見つからなかったので、

先日の東京都知事選のデータを使用します。

5万票以上は個人で、5万票未満はまとめることとします。

まずは"vote"に各票数をいれます。

 

> vote <- c(2112979.000,982594.767,956063.000,610865.000,88936.000,64774.000,52886.21)

次に"vote"のラベルとして候補者名をいれます。

(氏名を日本語で入れるとグラフ化の際に文字化けしたので頭文字を使用します)

> candidate <- c("M","U","H","T","I","D","others")

"vote"の名前に"candidate"を使用します。

 

> names(vote) <- candidate

そうすると、"vote"にラベルがつきます。

> vote

         M          U          H          T          I          D     others 

 

2112979.00  982594.77  956063.00  610865.00   88936.00   64774.00   52886.21

 

 

2. 円グラフを描こう

円グラフを描くには関数pieを用います。

pie(vote)で円グラフが描けますが、色も指定できるので、

まず、配色したいとおもいます。

> vote.col <- c("yellow","green3","purple","violetred1","cyan","lightblue","mistyrose")

この結果をもとに円グラフを描きます。

> pie(vote,col=vote.col,radius=1)

ここで、"radius"は円グラフの大きさを指定する引数で-1から1の範囲で作成します。

結果は以下の通りです。

モノクロ印刷をしなければならないときは、

カラー表現だと印刷したら区別がつきません。

その際は、斜線をもちいます。

斜線の密度は"density"を、斜線の角度は"angle"を用います。

> pie(vote,density=30,angle=30+20*1:7)

結果は下記の通りです。

 

3. 余談①

票数に小数点以下の値があったのでなぜか調べてみました。

どうも法律で同姓や同名があり、重複した部分のみが投票された場合でも、

その票は有効となり、決まりに従い、その票がそれぞれの候補者にわけられるそうです。

こんかいは"けんじ"という同名の候補者がいて、かつ、"けんじ"のみ明記した票があったので、各候補者の票数の小数点以下が0でなかったそうです。

 

4. 余談②

グラフが描かれるシート"Quartz"では日本語がうまく表示されませんでした。

色々調べると、".Rprofile"というファイルに以下のコードをかけばいいそうです。

setHook(packageEvent("grDevices", "onLoad"),
        function(...){
            grDevices::quartzFonts(serif=grDevices::quartzFont(
                c("Hiragino Mincho Pro W3",
                  "Hiragino Mincho Pro W6",
                  "Hiragino Mincho Pro W3",
                  "Hiragino Mincho Pro W6")))
            grDevices::quartzFonts(sans=grDevices::quartzFont(
                c("Hiragino Kaku Gothic Pro W3",
                  "Hiragino Kaku Gothic Pro W6",
                  "Hiragino Kaku Gothic Pro W3",
                  "Hiragino Kaku Gothic Pro W6")))
            # grDevices::quartz.options(family="sans")
        }
)
attach(NULL, name = "MacJapanEnv")
assign("familyset_hook",
       function() { if(names(dev.cur())=="quartz") par(family="sans")},
       pos="MacJapanEnv")
setHook("plot.new", get("familyset_hook", pos="MacJapanEnv"))

#setHook(packageEvent("grDevices", "onLoad"),function(...) grDevices::ps.options(family="Japan1"))

options(X11fonts = c("-alias-gothic-%s-%s-*-*-%d-*-*-*-*-*-*-*",
                          "-adobe-symbol-*-*-*-*-%d-*-*-*-*-*-*-*"))

setHook(packageEvent("grDevices", "onLoad"),
        function(...) grDevices::ps.options(family="Japan1Ryumin"))

でも、それ以前に、".Rprofile"というファイルがみあたりません。

なければ作成すればいいそうですが、どこに作成したらいいのかわかりません。

mac使い始めてまもないのでファイル関係がよくわかりません。

[Macintosh HD] > [ライブラリ] > [Frameworks]あたりが怪しい気がしますが…

また調べてみます。