具有ggmap和ggplot2的国家的行政区域地图 [英] Administrative regions map of a country with ggmap and ggplot2

查看:186
本文介绍了具有ggmap和ggplot2的国家的行政区域地图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

 图书馆(XML)
图书馆( ggplot2)
图书馆(plyr)
图书馆(地图)

失业< -
readHTMLTable('http://www.bls.gov/web/laus /laumstrk.htm',
colClasses = c('character','character','numeric'))[[2]]

names(unemp)< - c('等级','地区','比率')
失业$地区< - tolower(失业地区)

us_state_map< - 地图数据('州')
map_data < - merge(unst,us_state_map,by ='region')

map_data< - arrange(map_data,order)

states< - data.frame(state (数据= map_data,aes(x = long,y = lat,group =组))
p1 <-p1 + geom_polygon(aes(fill = cut_number(rate,5)))
p1 < - p1 + geom_path(color ='gray',linestyle = 2)
p1 < - p1 + scale_fill_brewer费率(2011年1月)',palette ='PuRd')
p1 < - p1 + coord_map()
p1 < - p1 + geom_text(data = states,aes(x = x,y = y,label = state.abb,group = NULL) = 2)
p1 < - p1 + theme_bw()
p1



现在我想要类似巴基斯坦的一种图表。我的一些尝试结果如下:

  data(world.cities)
巴基斯坦< - data.frame(map (世界,巴基斯坦,plot = FALSE)[c(x,y)))

p < - ggplot(巴基斯坦aes(x = x,y = y ))+
geom_path(color ='green',linestyle = 2)+
coord_map()+ theme_bw()
p < - p + labs(x =,y = )
p < - p + theme(panel.grid.minor = element_blank(),panel.grid.major = element_blank())
p < - p + theme(axis.ticks = element_blank ),axis.text.x = element_blank(),axis.text.y = element_blank())
p < - p + theme(panel.border = element_blank())
print(p)



  library( mapproj)

国家< - 巴基斯坦

Get_Map_Country< -
get_map(
location = Country
,zoom = 5
,scale =auto
,maptype =路线图
,messages = FALSE
,urlonly = FALSE
,filename =ggmapTemp
,crop = TRUE
,color =color
,source =google
,api_key


Country1< -
ggmap(
ggmap = Get_Map_Country
,extent =panel
#,base_layer
,maprange = FALSE
,legend =right
,padding = 0.02
,darken = c(0,black)


Country 1 < - Country1 + labs(x =Longitude,y =Latitude)
print(Country1)

  Country2<  -  Country1 + geom_polygon(data = Pakistan 
,aes(x = x,y = y)
,color ='white',alpha = .75,size = .2)

print(Country2)



问题

我不知道如何得到美国的巴基斯坦行政区域地图。我知道,我们需要行政边界的经度和纬度。我想知道如何获得一个国家的行政边界的经度和纬度。我尝试了全球行政区,但没有成功。任何在这方面的帮助将不胜感激。谢谢

解决方案

我不知道您需要的行政区域的空间层次,但有两种方法可以读取
全球行政区域(gadm.org)获取shapefile数据和.RData格式,并将其转换为数据框以供使用在ggplot2中。此外,为了复制美国地图,您需要绘制位于多边形质心的管理区域名称。

  library (ggplot2)
库(rgdal)



方法1.以.RData格式存储的SpatialPolygonDataFrames



 #来自全球行政区域的数据
#1)读取行政区域2级数据

load(/ Users / jmuirhead / Downloads / PAK_adm2.RData)
pakistan.adm2.spdf< - get(gadm)



Method2。使用rgdal :: readOGR

读入Shapefile格式

  pakistan.adm2.spdf<  -  readOGR(/ Users / jmuirhead / Downloads / PAK_adm,PAK_adm2,
verbose = TRUE,stringsAsFactors = FALSE)



创建例如,来自spatialPolygonDataframes的data.frame,并与包含失业信息的data.frame合并。 .df < - fortify(pakistan.adm2.spdf,region =NAME_2)

#失业信息示例数据框
unemployment.df< - data.frame(id = unique (pakistan.adm2.df [,'id']),
unemployment = runif(n = length(unique(pakistan.adm2.df [,'id'])),min = 0,max = 25) )

pakistan.adm2.df< - merge(pakistan.adm2.df,unemployment.df,by.y ='id',all.x = TRUE)



提取绘图的行政区域的名称和内容



 #获取spatialPolygonDataFrame的质心并将其转换为t o数据框
#用于绘制区域名称。

pakistan.adm2.centroids.df< - data.frame(long = coordinates(pakistan.adm2.spdf)[,1],
lat = coordinates(pakistan.adm2.spdf )[,2])

#获取与管理区域相对应的名称和ID号
pakistan.adm2.centroids.df [,'ID_2']< - pakistan.adm2.spdf @ data [,'ID_2']
pakistan.adm2.centroids.df [,'NAME_2']< - pakistan.adm2.spdf@data [,'NAME_2']



为管理区域创建带有标签的ggplot



  p <-ggplot(pakistan.adm2.df,aes(x = long,y = lat,group = group))+ geom_polygon(aes(fill = cut(unemployment,5)))+ 
geom_text = pakistan.adm2.centroids.df,aes(label = NAME_2,x = long,y = lat,group = NAME_2),size = 3)+
labs(x =,y =)+
theme_bw()+ scale_fill_brewer('失业率(2011年1月)',palette ='PuRd')+
coord_map()+
主题(panel.grid.minor = element_blank(), panel.grid.major = element_blank())+
t heme(axis.ticks = element_blank(),axis.text.x = element_blank(),axis.text.y = element_blank())+
theme(panel.border = element_blank())

print(p)


I can make USA state level unemployment graph with the following code.

library(XML)
library(ggplot2)
library(plyr)
library(maps)

unemp <-
  readHTMLTable('http://www.bls.gov/web/laus/laumstrk.htm',
    colClasses = c('character', 'character', 'numeric'))[[2]]

names(unemp) <- c('rank', 'region', 'rate')
unemp$region <- tolower(unemp$region)

us_state_map <- map_data('state')
map_data <- merge(unemp, us_state_map, by = 'region')

map_data <- arrange(map_data, order)

states <- data.frame(state.center, state.abb)

p1 <- ggplot(data = map_data, aes(x = long, y = lat, group = group))
p1 <- p1 + geom_polygon(aes(fill = cut_number(rate, 5)))
p1 <- p1 + geom_path(colour = 'gray', linestyle = 2)
p1 <- p1 + scale_fill_brewer('Unemployment Rate (Jan 2011)', palette  = 'PuRd')
p1 <- p1 + coord_map()
p1 <- p1 + geom_text(data = states, aes(x = x, y = y, label = state.abb, group = NULL), size = 2)
p1 <- p1 + theme_bw()
p1

Now I want to similar kind of graph for Pakistan. My few attempts results are below:

data(world.cities)
Pakistan <- data.frame(map("world", "Pakistan", plot=FALSE)[c("x","y")])

p <- ggplot(Pakistan, aes(x=x, y=y)) +
     geom_path(colour = 'green', linestyle = 2) +
     coord_map() + theme_bw()
p <- p + labs(x=" ", y=" ")
p <- p + theme(panel.grid.minor=element_blank(), panel.grid.major=element_blank())
p <- p + theme(axis.ticks = element_blank(), axis.text.x = element_blank(), axis.text.y = element_blank())
p <- p + theme(panel.border = element_blank())
print(p)

and

library(mapproj)

Country <- "Pakistan"

Get_Map_Country <-
  get_map(
      location = Country
    , zoom = 5
    , scale = "auto"
    , maptype = "roadmap"
    , messaging = FALSE
    , urlonly = FALSE
    , filename = "ggmapTemp"
    , crop = TRUE
    , color = "color"
    , source = "google"
    , api_key
    )

Country1 <-
  ggmap(
      ggmap = Get_Map_Country
    , extent = "panel"
  #  , base_layer
    , maprange = FALSE
    , legend = "right"
    , padding = 0.02
    , darken = c(0, "black")
    )

Country1 <- Country1 + labs(x="Longitude", y="Latitude")
print(Country1)

Country2 <- Country1 + geom_polygon(data = Pakistan
                    , aes(x=x, y=y)
                    , color = 'white', alpha = .75, size = .2)

print(Country2)

Questions

I wonder how to get map of administrative regions of Pakistan as of USA. I know for this we need longitude and latitude of administrative boundaries. I'm wondering how to get longitude and latitude of administrative boundaries for a country. I tried Global Administrative Areas but without success. Any help in this regard will be highly appreciated. Thanks

解决方案

I don't know the spatial level of administrative areas you require, but here's two ways to read in shapefile data and .RData formats from Global Administrative Areas (gadm.org), and converting them into data frames for use in ggplot2. Also, in order to replicate the U.S. map, you will need to plot the administrative area names located at the polygon centroids.

library(ggplot2)
library(rgdal)

Method 1. SpatialPolygonDataFrames stored as .RData format

# Data from the Global Administrative Areas
# 1) Read in administrative area level 2 data

load("/Users/jmuirhead/Downloads/PAK_adm2.RData")
pakistan.adm2.spdf <- get("gadm")

Method2. Shapefile format read in with rgdal::readOGR

pakistan.adm2.spdf <- readOGR("/Users/jmuirhead/Downloads/PAK_adm", "PAK_adm2", 
 verbose = TRUE, stringsAsFactors = FALSE)

Creating a data.frame from the spatialPolygonDataframes and merging with a data.frame containing the information on unemployment, for example.

pakistan.adm2.df <- fortify(pakistan.adm2.spdf, region = "NAME_2")

# Sample dataframe of unemployment info
unemployment.df <- data.frame(id= unique(pakistan.adm2.df[,'id']),
  unemployment = runif(n = length(unique(pakistan.adm2.df[,'id'])), min = 0, max = 25))

pakistan.adm2.df <- merge(pakistan.adm2.df, unemployment.df, by.y = 'id', all.x = TRUE)

Extracting names and centoids of administrative areas for plotting

# Get centroids of spatialPolygonDataFrame and convert to dataframe
# for use in plotting  area names. 

pakistan.adm2.centroids.df <- data.frame(long = coordinates(pakistan.adm2.spdf)[, 1], 
   lat = coordinates(pakistan.adm2.spdf)[, 2]) 

# Get names and id numbers corresponding to administrative areas
pakistan.adm2.centroids.df[, 'ID_2'] <- pakistan.adm2.spdf@data[,'ID_2']
pakistan.adm2.centroids.df[, 'NAME_2'] <- pakistan.adm2.spdf@data[,'NAME_2']

Create ggplot with labels for administrative areas

p <- ggplot(pakistan.adm2.df, aes(x = long, y = lat, group = group)) + geom_polygon(aes(fill = cut(unemployment,5))) +
geom_text(data = pakistan.adm2.centroids.df, aes(label = NAME_2, x = long, y = lat, group = NAME_2), size = 3) + 
labs(x=" ", y=" ") + 
theme_bw() + scale_fill_brewer('Unemployment Rate (Jan 2011)', palette  = 'PuRd') + 
coord_map() + 
theme(panel.grid.minor=element_blank(), panel.grid.major=element_blank()) + 
theme(axis.ticks = element_blank(), axis.text.x = element_blank(), axis.text.y = element_blank()) + 
theme(panel.border = element_blank())

print(p)

这篇关于具有ggmap和ggplot2的国家的行政区域地图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆