2016-10-25 21 views
1

ggmap、ggplot、およびgeom_polygonを使用して地図上に重複を重ねることに苦労しています。私はRにはとても新しいので、どのように進むべきかはわかりません。私はR Studioを使用しています。 hereggplot、geom_polygonに重複してggmapにエラーが発生しました。

Alberta(実際にはテスト用の乱数のみ)の国勢調査の地域内に、件数のデータファイルがあります。私はデータをアップロードしました(偽のテストデータです)。私はまた、これらの領域のシェイプファイルを持っています。私はエドモントン市のエリアだけに興味があり、私たちが見ている街のどこが基本的なロードマップなしで見えるのかを知ることは難しいです。

私のコードは以下の通りです:(予想通り)

################################# 
#enter long and lat for appx area of City of Edmonton (this is so we can change it easier later to narrow down if we want) 
lat1 <- 53.65 
lat2 <- 53.44 
long1 <- -113.68 
long2 <- -113.35 
################################# 

xcoords <- c(long2, long1) 
ycoords <- c(lat2, lat1) 

#load data 
data <-read.csv("C:.../fakedata.csv") #data file location 
names(data) 
data 

#Load in the shape file 
shp=readShapeSpatial('C:.../gda_048b06a_e.shp') #shape file location 

plot(shp) 

これを与える、地域のためにすべてのDA。しかし、これは大きすぎるので、手作業で手に入り、エドモントンにいるものがどれくらいあるのかを見極めるには多すぎるDAがあります。そうではないので、私は#件のテーマに従って色付けし、緯度:

#Making the data types match 
data$amount <-as.numeric(as.character(data$amount)) 

is.factor(shp$DAUID) 
data$DAUID<-as.factor(data$DAUID) 
is.factor(data$DAUID) #should be True 
is.factor(shp$DAUID) #should be True 

[email protected] <- left_join([email protected], data) 
head([email protected]) 
map2 <- fortify(shp, region = "DAUID") 

#wait a bit for the fortify to work! 
map2 <- rename(map2, DAUID = id) 
map2 <- left_join(map2, [email protected]) 
ggplot2 <- ggplot(map2) 

#DA map 
datamap <- ggplot2 + geom_polygon(aes(long, lat, group = group, fill = amount),color = "grey") + 
scale_fill_gradient(low='white', high='red') + coord_map(xlim = 
xcoords,ylim = ycoords) 
datamap 

datamapも同様です。

#map of Edm 
edmonton <- get_map(location = 'edmonton',maptype="road") 
ggmap(edmonton) 

は、私は何をしたいのロードマップ上に自分のDAマップをオーバーレイであるので、我々は、光領域対暗いがどこにあるかの良いアイデアを得ることができます。私はこの時点でエラーを受け取るようになっています。

#stuck on how to overlay datamap on top of ggmap(edmonton) 

datamap2 <- ggmap(edmonton) + datamap 
datamap2 

私はこのエラーが表示されます。

Error in p + o : non-numeric argument to binary operator In addition: Warning message: Incompatible methods ("+.gg", "Ops.data.frame") for "+"

私は同様の問題に見てきましたが、私はそれをするために得るように見えることはできませんソリューションを組み込むしようとしている一週間のためにそれを周りにプレイしました作業。私のシェイプファイルは私の都市マップよりもはるかに大きいので、それが問題になるかもしれませんか?私は前にRでこのようなことをしたことは一度もなく、GISは私のスキルセットの外にあります。

私の質問はこのprevious questionと似ていますが、その解決策は私のためには機能しませんでした。他の質問と内容が近すぎるとお詫び申し上げます。ご指摘いただきありがとうございます。

(私もこれが長すぎる!私は任意の有用な情報を残したくなかった謝罪)

答えて

0

私はあなたのケースに見て、私の方法で仕事をしてしまいました。あなたがそれを気にしないことを願っています。あなたが必要としたのは、ポリゴンデータの偽のデータセットにamountのデータセットを持つことでした。おそらくあなたがleft_joinを使用していたのではないかと思います。とにかく、各ポリゴンのデータポイント数は異なります。私は各ポリゴンのデータポイントの合計を計算し、numを作成しました。これを使用して、ベクトルをDAUIDで作成し、idmymap2に置き換えます。データを整理すると、ggmapのラスタマップが得られます。次に、ラスタマップの上にポリゴンを描画します。あなたはアルファ値をコントロールして、どのように色が出るかを見てください。例えば、値を0.1に下げると、色の違いを見るのが難しくなります。道路を表示する別の方法を検討することもできます。 1つの方法は、カナダの道路データセットを使用し、エドモントンでいくつかの主要な道路を描くことです。これがあなたを助けることを願っています。完璧だ

library(readr) 
library(dplyr) 
library(ggplot2) 
library(ggmap) 
library(rgdal) 

#load data 
mydata <- read_csv("fakedata.csv") %>% 
      rename(id = DAUID) 

#Load in the shape file 
mymap <- readOGR(dsn = ".", layer = "gda_048b06a_e") 

[email protected]$DAUID <- as.numeric(as.character([email protected]$DAUID)) 

mymap2 <- fortify(mymap) 

# Get the number of data points for each polygon 
group_by(mymap2, as.numeric(id)) %>% 
summarize(total = n()) -> num 

# Replace id with DAUID, and merge with mydata 
mymap2 %>% 
mutate(id = rep(unique(mymap$DAUID), num$total)) %>% 
left_join(mydata, by = "id") -> mymap2 


#map of Edm 
edmonton <- get_map(location = "edmonton",maptype = "road") 

ggmap(edmonton) + 
geom_map(data = mymap2, map = mymap2, 
     aes(x = long, y = lat, group = group, map_id = id, fill = amount), 
     color = "black", size = 0.2, alpha = 0.3) + 
scale_fill_gradient(low = "white", high = "red") + 
coord_map(xlim = c(-113.35, -113.68), ylim = c(53.44, 53.65)) 

enter image description here

+0

!まさに私が探していたもの。私は問題がポリゴンであることを認識しませんでした。ご助力ありがとうございます! :) –

+0

@ A.Mullinsあなたを助けてくれてありがとう。私はあなたが何をしているのか分からなかった。だから自分のやり方でそれを作り出しました。私はエラーメッセージがggmap()に追加しようとしていたものが互換性がないことを示していたと思います。あなたが私のコードを見たら、私は 'ggplot()'を呼び出さないのですか?あなたのケースでは、あなたは 'ggmap()'を呼び出し、 'ggplot()'を含むオブジェクトを追加しようとしました。私はこれがエラーメッセージの原因だと思った。しかし、結論は、あなたが今望んでいる地図を持っているということです。 :) – jazzurro

+0

あなたの情報については、私はggmapに国勢調査の境界線を描画するパッケージを、 'geom_boundary()'、https://github.com/GL-Li/ggtigerの1つの関数で作成しています。それがあなたに役立つことを願っています。 –

関連する問題