2012-04-19 12 views
3

ggplot2にgeom_mapが追加されたので、以前のマッピング方法からchoroplethに移行しようとしています。一例が10-11頁(HERE)に見られる。geom_mapすべての部分領域が同じ色

私はデータセットでこれを実行しようとしています。過去のgorplotの新しいgeom_mapではなく、choroplethを作成しました。私の考えは、Hadelyの例のようだと思っていますが、すべてが同じ色です。

データセットとコード:

#loads 2 data frames: ny and cad from my drop box 
load(url("http://dl.dropbox.com/u/61803503/MAPPING.RData")) 
library(ggplot2) 

ggplot(cad, aes(map_id = subregion)) + 
    geom_map(aes(fill = Math_Pass_Rate), map = ny) + 
    expand_limits(x = ny$long, y = ny$lat) + 
    guides(fill = guide_colorbar(colours = topo.colors(10))) + 
    opts(legend.position = "top") 

なぜそれが同じ色として表示されていますか? @PaulHiemstra

から


追加情報私はそれに少し不可解てきたが、良い結果を得ることができませんでした。しかし、私はまたあなたがリンクしているggplot2 pdfの例がなぜ機能するのだろうと思います。

このコードは、正しいchoroplethマップを生成します。

crimes <- data.frame(state = tolower(rownames(USArrests)), USArrests) 
states_map <- map_data("state") 
ggplot(crimes, aes(map_id = state)) + 
    geom_map(aes(fill = Murder), map = states_map) + 
    expand_limits(x = states_map$long, y = states_map$lat) + 
    guides(fill = guide_colorbar(colours = topo.colors(10))) + 
    opts(legend.position = "top") 

一つは、リンクがstates_mapの列(ポリゴン)とcrimesの列(Murder)との間で行われたこと、map_id = stateを使用していることが予想されます。 crimesstate列が含まれます。

> head(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 

をしかしstates_mapない:

> head(states_map) 
     long  lat group order region subregion 
1 -87.46201 30.38968  1  1 alabama  <NA> 
2 -87.48493 30.37249  1  2 alabama  <NA> 
3 -87.52503 30.37249  1  3 alabama  <NA> 
4 -87.53076 30.33239  1  4 alabama  <NA> 
5 -87.57087 30.32665  1  5 alabama  <NA> 
6 -87.58806 30.32665  1  6 alabama  <NA> 

だから、ポリゴンとデータとの間のリンクには、いくつかの黒魔術が起こっているようです。 @TylerRinkerの持つ問題点についても説明しています。

+0

+1、Dropboxの面白い使い方。 –

+0

質問にもう少し奇妙な振る舞いを加えました。私はこの例がなぜ機能するのか理解できませんでした。 –

+0

@PaulHiemstra興味深い面白いところがあります:私は 'x < - readRDS(" foo.rds ")'を同じように動作させるようには思えませんでした。一般的に、あなたがオブジェクト名を指示するので、readRDS'。 –

答えて

5

これは、geom_mapの動作について文書化されています。 geom_mapは、states_mapから常にregionという変数(あるいは、id)を描画します。これは以下によって確認される。実行:

ny$region = ny$subregion 

region列にsubregion名を置きます。今、正しい画像にリード線をプロットする:だから

enter image description here

geom_mapregionまたはidを使用しています。

+0

私は、この問題のための 'ggplot2' githubに関するバグ報告を作成しました。 https://github.com/hadley/ggplot2/issues/504 –

+0

私はこれがバグだとは思わない - 'map_id'はマッチング変数をマップデータフレームではなくデータデータフレームに指定します。文書化されているように、それは常に 'id'または' region'と呼ばれなければなりません – hadley

+0

私は文書を反映する答えを編集しました。感謝! –

関連する問題