こんにちはスタックオーバーフローコミュニティ!
Rでコロプレスマップを作成するのに苦労しているので、誰か親切に助けてください.高校区別データセット(data.csv)(highdist_n83.shp.zip)。私が知りたいのは、地区面積ごとの缶の合計をマップに適切に記入する方法です。ドロップボックスからサンプルデータファイルと使用したい形状ファイルを取得するコードを提供しました。
EDIT 申し訳ありませんが、形状ファイルだけをプロットすると、ggplotを介してレンダリングされるのを見ることができることを追加するのを忘れました。ただし、「缶」変数の数を使用して地区を「塗りつぶす」ことを試みると、元の形状の上に線の塊のように見えるものをレンダリングする前に、R がしばらくハングします。エラーの原因は次のようなことが考えられるのではないでしょうか
- 形状ファイルが良くありません
- マージされたファイルに追加の行が追加されていることに気付いたので、データ フレームとシェープ ファイルをマージする方法に問題がある可能性があります。
- ある地域に複数の学校がありますが、ddply を使用するときにそれらを組み合わせていません。
お時間をいただきありがとうございます!
###load R scripts from dropbox
dropbox.eval <- function(x, noeval=F) {
require(RCurl)
intext <- getURL(paste0("https://dl.dropboxusercontent.com/",x), ssl.verifypeer = FALSE)
intext <- gsub("\r","", intext)
if (!noeval) eval(parse(text = intext), envir= .GlobalEnv)
return(intext)
}
##pull scripts from dropbox
dropbox.eval("s/wgb3vtd9qfc9br9/pkg.load.r")
dropbox.eval("s/tf4ni48hf6oh2ou/dropbox.r")
##load packages
pkg.load(c(ggplot2,plyr,gdata,sp,maptools,rgdal,reshape2))
###setup data frames
dl_from_dropbox("data.csv","dx3qrcexmi9kagx")
data<-read.csv(file='data.csv',header=TRUE)
###prepare GIS shape and data for plotting
dropbox.eval("s/y2jsx3dditjucxu/dlshape.r")
temp <- tempfile()
dlshape(shploc="http://files.hawaii.gov/dbedt/op/gis/data/highdist_n83.shp.zip", temp)
shape<- readOGR(".","highdist_n83") #HDOE high school districts
shape@proj4string
shape2<- spTransform(shape, CRS("+proj=longlat +datum=NAD83"))
data.2<-ddply(data, .(year, schoolcode, longitude, latitude,NAME,HDist,SDist), summarise,
total = sum(total),
cans= sum(cans))
coordinates(data.2) <-~longitude + latitude
shape2.df<-fortify(shape2)
mshape2.df<- merge(shape2.df,shape2@data, by.x="id", by.y="ID",all=TRUE)
newdata <- merge(mshape2.df,data.2, by.x="NAME", by.y="NAME", all=TRUE)
newdata <- newdata [order(newdata $order),]
###choropleth map:
mapPlot <- ggplot(newdata,aes(x=long, y=lat,drop=FALSE)) +
geom_polygon(aes(fill=cans, drop=FALSE), colour = "black", lwd = 1/9,na.rm=FALSE)
+ ggtitle("Total of Cans Across State")
print(mapPlot)