前回ggplot2パッケージをそれ、mapsパッケージを使い米国の白地図に色をつける方法を練習。今回は ggplot2 パッケージの midwest サンプルデータセットへ戻ります。とはいえ羊頭狗肉?回。データセットはggplot2のものだけれども、プロットにはggplot2使っていません。前回同様 mapとな。
※「データのお砂場」投稿順Indexはこちら
※使用させていただいている Rのversionは 4.3.1。RStudioは 2024.04.2+764 “Chocolate Cosmos” です。
Midwest demographics再び
前回、ロードはしたものの、プロットするに至らなかったサンプルデータセットが以下です。
米国中西部の5州、イリノイ、インディアナ、ミシガン、オハイオ、ウィスコンシンの各州内の全カウンティ(郡)について、人口などの変数を集計したデータです。2000年の国勢調査にもとづくデータなようです。Rのサンプルデータセットにしたら「新しい」し、最近のデータじゃん、などと年寄は思ってしまうのですが、よく考えたら4分の1世紀も前のデータです。
変数は28もあります。各変数についてつべこべいうことはいたしません。ただ、全体としては「人種」別の人口とか学歴、年齢層などについて集計したデータで「なんか選挙戦向け」なテイストを感じるデータです。知らんけど。
対象範囲のカウンティのプロット
前回、既に生データのロードはしていますが、前回と同じところまで再度処理を行っておきます。まずはライブラリのロードから。サンプルデータセットが収まっている ggplot2パッケージ、および米国の地図データのプロット用に mapsパッケージをロードしておきます。
library(ggplot2) library(maps)
データセットは以下の2つ。
data("midwest") data(countyMapEnv)
さてこれで必要なデータセットがメモリ上に載ったので、以下のコードを走らせてターゲットの全カウンティのマップを作製してみます。こんな感じ。
stateNam <- c('Illinois', 'Indiana', 'Michigan', 'Ohio', 'Wisconsin') map('county', stateNam, fill = TRUE, col = palette())
プロットが以下に。5大湖の南西側の一帯があらわれております。
南東側の方のカウンティの方が、小さめで結構デコボコがある感じがするのですが、北や西になるほど、面積が広く、区割りも縦横そろっている感じがいたします。米国にヨーロッパ人が「入植してきた」当初、緯度経度で区画を決めて割り当てていた?とも聞くので、その影響?素人老人には分からんなあ。
都市エリアのプロット
データベースの変数の中に inmetroというものがあり、これに1が立っていると「大都市圏」ということになるみたいです。ここでいう大都市圏がどの程度のものかは不明ですが、プロットしてみると5州の「ダイタイ」が分かるかもしれませぬ。
colMetro <- rep('white', length(midwest$inmetro)) metro <- midwest[midwest$inmetro == 1, ] cnum <- match(metro$county, midwest$county) colMetro[cnum] <- 'green' map('county', stateNam, fill = TRUE, col = colMetro) points(-87.623177, 41.881832, col="black",pch=15) text(-87.623177, 41.881832+0.3, "Chicago",col="black") points(-83.04750, 42.3316000, col="black",pch=15) text(-83.04750, 42.3316000+0.3, "Detroit", col="black") points(-86.148003, 39.791000, col="black",pch=15) text(-86.148003, 39.791000+0.3, "Indianapolis", col="black") points(-89.401230, 43.073051, col="black",pch=15) text(-89.401230, 43.073051+0.3, "Madison", col="black") points(-81.681290, 41.505493, col="black",pch=15) text(-81.681290, 41.505493+0.3, "Cleveland", col="black")
上の4行が、前回の白地図色付けで学んだ方法そのままです。条件にあうカウンティのお名前を引きずり出して、条件の部分に色を指定するためのベクトルcolMetroを生成してます。ここでは都市部に緑色をつけるっと。
そしてプロットは map()関数を使い1撃。
そのあとダラダラとつづく10行は、プロット領域内で大都市じゃないかと思われる都市名とその場所(よくわからんけど、市庁舎の場所?なんなんだ)に印をつけるためのものです。 結果が以下に。
Chicagoとか、Clevelandとかはいかにもだけれども、Indianapolisとか田舎じゃん?すみません。
白人人口が90%を切っている群
この2000年のデータでは、白人人口が90%を超えているカウンティが大多数に見えるのですが、一部の郡では白人人口が90%を切るところがあるので、これをプロットしてみることにしました。
colPercWhite <- rep('white', length(midwest$percwhite)) percWhiteLess90 <- midwest[midwest$percwhite < 90, ] cnum <- match(percWhiteLess90$county, midwest$county) colPercWhite[cnum] <- 'orange' map('county', stateNam, fill = TRUE, col = colPercWhite)
非白人が多いのは都市部という思い込みがあったのです。確かにそんな感じがしないでもないです。でも「そうでもないところ」にもあり。
ネイティブ・アメリカンの皆さま
このデータセットが「古いな~」と実感されるのは、ネイティブ・アメリカンの皆さまのカテゴリが「アメリカ・インディアン」という呼称になっておることです。まずいぜ。変数名はそのままですが、処理しちまいます。大体どのカウンティもネイティブ・アメリカンの割合はせいぜい0.1%といった数字で非常に低いのですが、一部数%から10%を超えるようなカウンティもあります。これは「リザベーション」という領域があるためかね。だいたい「農業に向かない不便な場所」に押し込められた経緯があるらしいです。以下同文のやりかたでネイティブ・アメリカン比率が1%を超える地域をプロットしてみました。
colPercNA <- rep('white', length(midwest$percamerindan)) percPercNA <- midwest[midwest$percamerindan > 1, ] cnum <- match(percPercNA$county, midwest$county) colPercNA[cnum] <- 'red' map('county', stateNam, fill = TRUE, col = colPercNA)
カナダ国境に近い北の端に多いみたい。冬は寒そうだな。