どうしてもggplot2を使ってコロプレス図を描いてみたい。練習編
平日なので、というか仕事の日なので終始ねむい。
ねむいの。むかしよりもずっと。
最近、
日本の市町村のシェープファイルを取ってきてー
地図を描いてー
他のデータとマージさせてー
うまいこと色分けしたいー
みたいなことを考えて思うようにやったら失敗したので。笑
ちゃんと基礎から練習します。
(シェープファイルから地図を描くことは出来たんだけどなあ)
私が思い描いているものは、
どうやらコロプレス図というらしい、、、
参考文献
Rグラフィックスクックブック ―ggplot2によるグラフ作成のレシピ集
- 作者: Winston Chang,石井弓美子,河内崇,瀬戸山雅人,古畠敦
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/11/30
- メディア: 大型本
- この商品を含むブログ (2件) を見る
友人に貸していたのが最近戻ってきた!
「やりたいこと」があった時に、辞書的に使ってます。
今回はこれの地図の章の例題をいじりながら使っていこうかなと。
#---まず地図を描いてみる---------------------- install.packages("mapproj") library(maps)#地図データ読み込み library(ggplot2) #アメリカの地図データを取得 states_map=map_data("state") #地図の描画(白く塗りつぶしたパターン) ggplot(data=states_map,aes(x=long,y=lat,group=group))+ geom_polygon(fill="white",colour="black") ##long=経度、lat=緯度。
まあまあまあ。
こないだ日本データでうまくいかなかったのでアメリカ地図なことは受け入れる、、、
#---いよいよ本番------------------------------- #USArrestsデータセットの取得 #アメリカの犯罪発生件数というか、そんな感じのデータセットっぽいですね crimes=data.frame(state=tolower(rownames(USArrests)),USArrests) > crimes state Murder Assault UrbanPop Rape Alabama alabama 13.2 236 58 21.2 Alaska alaska 10.0 263 48 44.5 Arizona arizona 8.1 294 80 31.0 Arkansas arkansas 8.8 190 50 19.5 California california 9.0 276 91 40.6 Colorado colorado 7.9 204 78 38.7 Connecticut connecticut 3.3 110 77 11.1 Delaware delaware 5.9 238 72 15.8 Florida florida 15.4 335 80 31.9 Georgia georgia 17.4 211 60 25.8 Hawaii hawaii 5.3 46 83 20.2 Idaho idaho 2.6 120 54 14.2 Illinois illinois 10.4 249 83 24.0 Indiana indiana 7.2 113 65 21.0 Iowa iowa 2.2 56 57 11.3 Kansas kansas 6.0 115 66 18.0 Kentucky kentucky 9.7 109 52 16.3 Louisiana louisiana 15.4 249 66 22.2 Maine maine 2.1 83 51 7.8 Maryland maryland 11.3 300 67 27.8 Massachusetts massachusetts 4.4 149 85 16.3 Michigan michigan 12.1 255 74 35.1 Minnesota minnesota 2.7 72 66 14.9 Mississippi mississippi 16.1 259 44 17.1 Missouri missouri 9.0 178 70 28.2 Montana montana 6.0 109 53 16.4 Nebraska nebraska 4.3 102 62 16.5 Nevada nevada 12.2 252 81 46.0 New Hampshire new hampshire 2.1 57 56 9.5 New Jersey new jersey 7.4 159 89 18.8 New Mexico new mexico 11.4 285 70 32.1 New York new york 11.1 254 86 26.1 North Carolina north carolina 13.0 337 45 16.1 North Dakota north dakota 0.8 45 44 7.3 Ohio ohio 7.3 120 75 21.4 Oklahoma oklahoma 6.6 151 68 20.0 Oregon oregon 4.9 159 67 29.3 Pennsylvania pennsylvania 6.3 106 72 14.9 Rhode Island rhode island 3.4 174 87 8.3 South Carolina south carolina 14.4 279 48 22.5 South Dakota south dakota 3.8 86 45 12.8 Tennessee tennessee 13.2 188 59 26.9 Texas texas 12.7 201 80 25.5 Utah utah 3.2 120 80 22.9 Vermont vermont 2.2 48 32 11.2 Virginia virginia 8.5 156 63 20.7 Washington washington 4.0 145 73 26.2 West Virginia west virginia 5.7 81 39 9.3 Wisconsin wisconsin 2.6 53 66 10.8 Wyoming wyoming 6.8 161 60 15.6 #データセットの統合 #地図の州とデータセットの州をうまいこと紐付ます crime_map=merge(states_map,crimes,by.x="region",by.y="state") #マージすると順番が入れ替わっちゃうみたいなので傍観 > head(crime_map) region long lat group order subregion Murder Assault UrbanPop Rape 1 alabama -87.46201 30.38968 1 1 <NA> 13.2 236 58 21.2 2 alabama -87.48493 30.37249 1 2 <NA> 13.2 236 58 21.2 3 alabama -87.95475 30.24644 1 13 <NA> 13.2 236 58 21.2 4 alabama -88.00632 30.24071 1 14 <NA> 13.2 236 58 21.2 5 alabama -88.01778 30.25217 1 15 <NA> 13.2 236 58 21.2 6 alabama -87.52503 30.37249 1 3 <NA> 13.2 236 58 21.2 #確かにregion(地域)順になってるっぽいことを確認。 #ここでのsubregionはregion以下の島のグループとかの細かい単位という認識です #arrange関数でソートする library(plyr) #group,とorderで順にソート crime_map=arrange(crime_map,order) > #もっかい見てみる(orderのところが整った!) > head(crime_map) region long lat group order subregion Murder Assault UrbanPop Rape 1 alabama -87.46201 30.38968 1 1 <NA> 13.2 236 58 21.2 2 alabama -87.48493 30.37249 1 2 <NA> 13.2 236 58 21.2 3 alabama -87.52503 30.37249 1 3 <NA> 13.2 236 58 21.2 4 alabama -87.53076 30.33239 1 4 <NA> 13.2 236 58 21.2 5 alabama -87.57087 30.32665 1 5 <NA> 13.2 236 58 21.2 6 alabama -87.58806 30.32665 1 6 <NA> 13.2 236 58 21.2 #変数の1つであるAssault(強盗事件)をfillにマッピング ggplot(crime_map,aes(x=long,y=lat,group=group,fill=Assault))+ geom_polygon()+ coord_map("polyconic")
できたーーー
こないだはやっぱりデータのマージ部分orソートが良くなかったんだろうか・・・
別な変数も使って見てみます
#変数の1つであるAssault(強盗事件)をfillにマッピング ggplot(crime_map,aes(x=long,y=lat,group=group,fill=Assault))+ geom_polygon()+ coord_map("polyconic")
おおお。
デフォルトの色を変えていないので
犯罪度数の多い方が「色が薄い」みたくなっていて
その点ちょっと直感的にはわかりにくくなってしまっておりますが。
どちらも南東側に州が犯罪度数高めって感じですかね、、
これをベースに色んなデータをマージさせて表示してみることからまず始めてみようかと。
アメリカ州別データならいろいろありそう~
今日は平日だということを言い訳にここまで。
ねむたい。