2016-06-14 24 views
3

私はFIPSコードで接続された2つのデータセットを持つ米国の郡のchoroplethマップを作成しようとしています。私が作るためにここcountyデータセットを使用したいgeom_map "map_id"参照の問題

library(ggplot2) 
    library(maps) 
    library(data.table) 
    county <- map_data("county")  
    data(county.fips) 
    county.fips <- as.data.table(county.fips) 
    county.fips$polyname <- as.character(county.fips$polyname)  
    county.fips[, paste0("type", 1:2) := tstrsplit(polyname, ",")] 
    names(county.fips) <- c("FIPS","polyname","region","subregion") 
    county <- merge(county, county.fips, by=c("region", "subregion"), all=T) 
    county <- county[,1:7] 
    county <- as.data.table(county) 
    county <- na.omit(county) 
    setkey(county, order) 
    county[region=="washington" & subregion=="san juan", FIPS := 53055] 
    county[region=="washington" & subregion=="pierce", FIPS := 53053] 
    county[region=="florida" & subregion=="okaloosa", FIPS := 12091] 
    county[region=="louisiana" & subregion=="st martin", FIPS := 22099] 
    county[region=="north carolina" & subregion=="currituck", FIPS := 37053] 
    county[region=="texas" & subregion=="galveston", FIPS := 48167] 
    county[region=="virginia" & subregion=="accomack", FIPS := 51001] 

:私はこのような1 data.tableにまとめmapsパッケージcountycounty.fipsデータ、(FIPSデータを統合するのはおそらくない最もエレガントな方法)を使用しています対応するFIPS列と異なるデータセットを使用して、それぞれの郡を記入してください。 geom_map、特にmap_id引数を使用すると問題が発生します。

次のコードは、私がmap_id=FIPS

ggplot() + 
    geom_map(data=county, map=county, 
      aes(x=long, y=lat, map_id=FIPS)) 

でそれを実行すると、エラーError in unit(x, default.units) : 'x' and 'units' must have length > 0しかし、map_id=regionでそれを実行して約2〜3のうちのあるmap_id=subregionリターンマップとそれを実行して法線マップを返し状態が抜けている。私が見つけた最も近い答えはで、map_idregionまたはidに設定する必要がありますが、FIPSの列名を変更しても役に立たないことが示唆されました。

誰でもここで何が起こっているのか説明できますか?私の理解はmap_idが別のものの鍵として必要なだけですdf$column;私はそれが間違っていますか?理想的には私はこのように、FIPSカラムを通って、私の第二のデータセットに結び付けることができるようにしたいと思います:

ggplot() + 
    geom_map(data=county, map=county, 
      aes(x=long, y=lat, map_id=FIPS)) + 
    geom_map(data=DT2, map=county, 
      aes(fill=Revenue, map_id=FIPS)) 
+0

たぶん、[このブログの記事](https://www.datascienceriot.com/mapping-us-counties-in-r-with-fips/kris/が) 'geom_map' doesnの –

答えて

0

カップルの事はここで起こって。最初に、上記の例で気付いたのは、いくつかのFIPSコードの先行ゼロを切り捨てていることです。すべてのFIPSは5桁である必要があります。この行をデータ準備の最後に追加することにより、先行ゼロを追加することができます。 ggplotについては

county$FIPS <- formatC(county$FIPS, width = 5, format = "d", flag = "0") 

、あなたは)(あなたのAESでgroup=groupを逃しています。私はあなたがchoroplethの塗りつぶしで使用しているかわからないんだけどので、それは再現するのは難しいですが、次のように動作するはずです:

ggplot(county, aes(long, lat, group = group)) + 
geom_polygon(aes(fill = YOUR_FILL_DATA), colour = alpha("white", 1/2), size = 0.2) 

編集:私はフィルレートとして使用する乱数の列を生成:

county$new.row <- sample(100, size = nrow(county), replace = TRUE) 

と同じggplotコードを実行しました。

enter image description here

+1

役に立つかもしれません'group = group'引数が必要ではありません(ドキュメントを参照)。私は 'geom_polygon'ではなく' geom_map'を共有キー列で使用しています。私の 'county'データセットをデータ・データセットとマージしたくないからです(上記のように)。私の他のデータセットでは 'county'時間に80k行〜8k行)。 – moman822