Rにおける色

allcolors <- colors()

head(allcolors) # いくつかの色
## [1] "white"         "aliceblue"     "antiquewhite"  "antiquewhite1"
## [5] "antiquewhite2" "antiquewhite3"
length(allcolors) # 色の名前の数
## [1] 657
red <- rgb(red = 1, green = 0, blue = 0) # 赤
green <- rgb(red = 0, green = 1, blue = 0) # 緑
blue <- rgb(red = 0, green = 0, blue = 1) # 青
c(red, green, blue) # 結果
## [1] "#FF0000" "#00FF00" "#0000FF"
black <- rgb(red = 0, green = 0, blue = 0) # 黒
white <- rgb(red = 1, green = 1, blue = 1) # 白
c(black, white) # 結果
## [1] "#000000" "#FFFFFF"
rgb(red = c(0.5, 1), green = c(0, 1), blue = c(0.5, 0)) # 紫と黄色
## [1] "#800080" "#FFFF00"
## 透過色の青
blue.trans <- rgb(red = 0, green = 0, blue = 1, alpha = 0.5) 

## 透過色の黒
black.trans <- rgb(red = 0, green = 0, blue = 0, alpha = 0.5) 
## 不透過色の円は識別しにくい
plot(x = c(1, 1), y = c(1, 1.2), xlim = c(0.5, 4.5), ylim = c(0.5, 4.5), 
     pch = 16, cex = 5, ann = FALSE, col = black)
points(x = c(3, 3), y = c(3, 3.2), pch = 16, cex = 5, col = blue)

## 透過色にすると識別しやすい
points(x = c(2, 2), y = c(2, 2.2), pch = 16, cex = 5, col = black.trans) 
points(x = c(4, 4), y = c(4, 4.2), pch = 16, cex = 5, col = blue.trans) 

アメリカ大統領選挙

変数 説明
state 州の略称
state.name 省略されていない州名
Obama オバマの得票率(パーセンテージ)
McCain マケインの得票率(パーセンテージ)
EV その州の選挙人票の数
  1. オバマが勝利した州に青を、マケインが勝利した州に赤を用いる。

    • こうすると「青の州と赤の州」に色分けされた地図が作成される。
  2. RGBのカラースキームでは青と赤の混合比によって様々な色調の紫が作成できることを活用して、2大政党の得票率を計算し、青の彩度を民主党の2大政党間の得票率として、赤の彩度を共和党の得票率として設定する。

    • こうすることで、州の色が民主党候補や共和党候補への支持の程度を反映したものになる。
library(maps)
pres08 <- read.csv("pres08.csv")

## 2大政党の得票率
pres08$Dem <- pres08$Obama / (pres08$Obama + pres08$McCain)
pres08$Rep <- pres08$McCain / (pres08$Obama + pres08$McCain)

## カリフォルニア州への彩色
cal.color <- rgb(red = pres08$Rep[pres08$state == "CA"], 
                 blue = pres08$Dem[pres08$state == "CA"], 
                 green = 0)
  1. オバマは2008年の選挙でカリフォルニア州で勝利したので、この州を青く彩色する。
## 青い州としてのカリフォルニア
map(database = "state", regions = "California", col = "blue", 
    fill = TRUE)

  1. RGBカラースキームを使って、2大政党の得票率に基づいてカリフォルニア州を彩色する。
## 紫色の州としてのカリフォルニア
map(database = "state", regions = "California", col = cal.color,
    fill = TRUE)

  1. オバマが勝利した州は青、マケインが勝利した州は赤という2択のカラースキームを用いる。
## 赤い州と青い州としてのアメリカ
map(database = "state") # 地図を作成
for (i in 1:nrow(pres08)) {
    if ((pres08$state[i] != "HI") & (pres08$state[i] != "AK") &
        (pres08$state[i] != "DC")) {
        maps::map(database = "state", regions = pres08$state.name[i],
            col = ifelse(pres08$Rep[i] > pres08$Dem[i], "red", "blue"),
            fill = TRUE, add = TRUE)
    }
}

  1. 各州の2大政党の得票率に基づいたRGBカラースキームを用いる。
## 紫色の州としてのアメリカ
map(database = "state") # 地図を作成
for (i in 1:nrow(pres08)) {
    if ((pres08$state[i] != "HI") & (pres08$state[i] != "AK") &
        (pres08$state[i] != "DC")) {
        map(database = "state", regions = pres08$state.name[i], 
            col = rgb(red = pres08$Rep[i], blue = pres08$Dem[i],
                green = 0), fill = TRUE, add = TRUE)
    }
}

ウォルマートの拡大

変数 説明
opendate 店舗の開店日
st.address 店舗所在地の住所
city 店舗所在地の市
state 店舗所在地の州
type 店舗のタイプ (Wal-MartStore, SuperCenter, DistributionCenter)
long 店舗所在地の経度
lat 店舗所在地の緯度
walmart <- read.csv("walmart.csv")

walmart$storecolors <- NA # 空のベクトルを作成

## 赤 = 通常のウォルマート, 緑 = スーパーセンター, 青 = 流通センター
walmart$storecolors[walmart$type == "Wal-MartStore"] <- 
    rgb(red = 1, green = 0, blue = 0, alpha = 1/3)
walmart$storecolors[walmart$type == "SuperCenter"] <-
    rgb(red = 0, green = 1, blue = 0, alpha = 1/3)
walmart$storecolors[walmart$type == "DistributionCenter"] <-
    rgb(red = 0, green = 0, blue = 1, alpha = 1/3)

## 流通センターは大きめの円にする
walmart$storesize <- ifelse(walmart$type == "DistributionCenter", 1, 0.5)
## 凡例付き地図
map(database = "state")

points(walmart$long, walmart$lat, col = walmart$storecolors, 
       pch = 19, cex = walmart$storesize)

par(family = "HiraginoSans-W3") #日本語が文字化けしないようにおまじない

legend(x = -120, y = 32, bty = "n", 
       legend = c("ウォルマート", "スーパーセンター", "流通センター"),
       col = c("red", "green", "blue"), pch = 19, # 色付きの実線の円
       pt.cex = c(0.5, 0.5, 1)) # 円の大きさ

参考文献

  1. 社会科学のためのデータ分析入門(上)岩波書店

  2. 社会科学のためのデータ分析入門(下)岩波書店

  1. Qiita: Rで地図を描く時便利な「maps, leaflet, NipponMap」

  2. Thomas J. Holmes (2011) “The diffision of Wal-Mart and economics of density.” Econometrica, vol. 79, no. 1, pp. 253-302.