簡體   English   中英

R中使用ggplot2的復雜映射

[英]Complex Maps in R Using ggplot2

最近,我需要使用美國的綜合統計區域創建地圖-我想分享如何完成此工作。 如果要使用郵政編碼或其他部門(縣,國會區等),則同樣適用。

1)您需要獲取任何程序繪制地圖所需的shapefile-這些文件基本上定義了創建形狀(狀態,zip,csa等)的多邊形。 在美國,人口普查局在

http://www.census.gov/cgi-bin/geo/shapefiles2013/main

(很抱歉,但是它們太大了,我無法提供示例數據)。 解壓縮它們並將它們放入您選擇的目錄中。 確保使用setwd()將其設置為工作目錄

2)需要使用包maptools中的readShapeSpatial將文件導入R中的空間數據框對象中。 在我的情況下,我讀取了2個文件,聲明了邊界並聲明了csa文件來描述了都會區。 為簡單起見,我在每個字段中都創建了一個id字段,這不是必需的。 請注意,rgeos也是必需的,默認情況下,maptools會嘗試使用gpoclib,但是存在一些許可證問題,rgeos doe不會

require(maptools)
require(rgeos)
cbsa_bdry = readShapeSpatial("tl_2013_us_csa.shp")
cbsa_bdry@data$id <- as.character(cbsa_bdry@data$GEOID)
state_bdry = readShapeSpatial("tl_2013_us_state.shp")
state_bdry@data$id <- as.character(state_bdry@data$STUSPS)

3)文件需要加強才能在ggplot中使用-據我所知,這是從空間數據集中創建用於繪制數據的數據。 我不明白,但這是必需的。 在這里,您使用id字段-就我而言是狀態和csa號

cbsa_map_f <- fortify(cbsa_bdry, region="id")
state_map_f <- fortify(state_bdry, region="id")

此時,可以使用ggplot映射強化的文件,但是通常您希望與它們映射其他一些數據,例如,定義形狀顏色的目標變量(可以說是容納州長官邸的一方) ,或平均收入,或您的分析要求的任何數據)

4)在這個例子中,我將合並空間數據幀的數據部分,在這種情況下,我不會合並任何其他數據。 請注意,我了解了使用歸並會由於排序而使數據混亂的困難方式,如果您使用歸並確保未對數據進行排序,那么我正在使用join。

require(plyr)
state_map_df <-join(state_map_f, state_bdry@data, by="id")
state_map_df$state <- state_map_df$STUSPS

5)做圖表-您需要按順序繪制圖層,首先是底層,然后是第二層,或者一個可以遮蓋另一個。 為了簡單起見,我只畫德克薩斯州

tx <-subset(cbsa_map_df,state=="TX" )
tx1 <- subset(state_map_df,state=="TX")
require(ggplot2)
require(mapproj)

sample <- ggplot(NULL) +geom_polygon(data=tx1,aes(long,lat,group=group),color="blue",fill="light gray")+coord_map(projection="mercator")+theme_bw()
sample <- sample +    geom_polygon(data=tx,aes(long,lat,fill=NAME,group=group),color="black")+theme(legend.position="bottom",axis.text.x = element_blank(),axis.text.y = element_blank(),axis.ticks = element_blank())
sample<- sample+guides(fill=guide_legend(title="MSA Name",nrow = 3,title.position="top",title.hjust=0.5,title.theme=element_text(face="bold",angle=0)))
sample <- sample + scale_x_continuous("")+scale_y_continuous("")
sample

我沒有將dataframne傳遞給最初的gplot調用以打開圖表,因為每一層都使用不同的數據框來存儲數據。 如果我合並了數據以使用連續刻度,則可以在fill =上將其用於csa部分

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM