2017年2月15日水曜日

Rでヒストグラムの一部に色をつける(colオプション指定で可)

「R ヒストグラム 一部 色をつける」で検索してみると、hist関数でヒストグラムを描いた後に、polygon関数で色をつける、なんて方法がヒットしました。

polygon使えばなんでもできそうだけど、なんか、ちょっと違うよなあ、とか思ってしまいまして。

で、実はhist関数のcolオプションでも、できるんですよね。

colオプションに1つの値(スカラー)を指定すると、全体が一色で塗りつぶされてしまいますが、ここにベクトルを指定すると、それぞれの棒の色を指定することができます。

例えば、ヒストグラムに10個のビンがあって、それぞれを任意の色で塗りたい場合は、10個の要素を持つベクトルをcolオプションに指定すればOKです。

set.seed(0)      # 再現性のために
rd <- rnorm(100) # 100個の乱数
cols <- c("white", "white", "red"  , "white", "white",
          "blue" , "white", "white", "white", "white")
hist(rd, col=cols)

ヒストグラムの一部に色をつける

色を塗りたくない場合は(パワポなどの「塗りつぶしなし」みたいな感じ)、色名の代わりにNAを指定すればいいです。

cols <- c(NA    , NA, "red", NA, NA,
          "blue", NA, NA   , NA, NA)
hist(rd, col=cols)

最初の例と全く同じ見た目になると思いますが、add=T指定で重ねたときなんかに差がでますね。

階級がいっぱいあって、いちいち全部書き出すのが面倒なときは、下記のような感じで、塗りたいところだけを指定すればいいですね。

cols <- rep("white", 100) # ”white”を詰めた、長めのベクトルを作っておく
cols[3] <- "red"
cols[6] <- "blue"
hist(rd, col=cols)

下記のようにすれば、最頻値に対応する棒を赤く塗る、なんてこともできます。

最初のhistは絵を描くためではなく、階級がどのように分けられるか、それぞれの度数がいくつか、なんて情報を得るためにやっています。

h <- hist(rd)                           # 度数分布に関する情報を得るために
cols <- rep("white", length(h$counts))  # 今度はビンの個数が分かるぞ
cols[which.max(h$counts)] <- "red"      # 最頻値のビンの色を赤にする
hist(rd, col=cols)

ヒストグラムの最頻値に色をつける

あと、線の色を変えたい場合は、borderオプションですね。

やってみると・・・

cols <- rep("black", length(h$counts)) # 枠線のデフォルトはblackなので
cols[which.max(h$counts)] <- "red"     # 最頻値の枠線を赤にする
hist(rd, border=cols)

border指定は右側の線で上書きされてしまう・・・

あー、重なった線の部分が、右側の黒で上書きされてしまった。

こういうときは・・・、polygon関数でも使ってください




0 件のコメント:

コメントを投稿