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)
あー、重なった線の部分が、右側の黒で上書きされてしまった。
こういうときは・・・、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関数でも使ってください
コメント
コメントを投稿