簡體   English   中英

使用ggplot()基於R中的ISO3代碼在世界地圖上着色國家/地區

[英]Color countries on world map based on ISO3 codes in R using ggplot()

我想知道我是否可以使用ggplot國家ggplot 使用rworldmap非常簡單,通過ggplot向lat / long值添加點也很容易。

有沒有一種方法可以使用ggplot (ISO3中的國家/地區名稱和每個國家/地區的數字)基於簡單的表格着色國家/地區?着色應基於計數。

p <- ggplot(legend=FALSE) +

geom_polygon(fill = "darkseagreen", data=world, aes(x=long, y=lat,group=group)) + 
 geom_path(colour = "grey40") + 
 theme(panel.background = element_rect(fill = "lightsteelblue2", colour = "grey")) +
 theme(panel.grid.major = element_line(colour = "grey90")
) +
 theme(panel.grid.minor = element_blank()) +
 theme(axis.text.x = element_blank(),
 axis.text.y = element_blank()) +
 theme(axis.ticks = element_blank()) +
 xlab("") + ylab("")

ggplot非常簡單。 在下文中,我使用GeoJSON版本的Natural Earth國家邊界(將ISO3代碼存儲在iso_a3 )投射到Winkel-Tripel。 我將世界銀行人口數據的CSV存儲在一個要點中,並將其讀入簡單表中。 然后我構建了兩個圖層,一個是世界幾何圖形的基礎圖層,然后是填充多邊形圖形。 因為它是預先投影的,所以我使用coord_equal vs coord_map (這對於choropleth來說很好,但如果你打算繪制線條則不需要預先投影它們,那么也是如此):

library(maptools)
library(mapproj)
library(rgeos)
library(rgdal)
library(ggplot2)
library(jsonlite)
library(RCurl)

# naturalearth world map geojson
URL <- "https://github.com/nvkelso/natural-earth-vector/raw/master/geojson/ne_50m_admin_0_countries.geojson.gz"
fil <- basename(URL)

if (!file.exists(fil)) download.file(URL, fil)
R.utils::gunzip(fil)
world <- readOGR(dsn="ne_50m_admin_0_countries.geojson", layer="OGRGeoJSON")

# remove antarctica
world <- world[!world$iso_a3 %in% c("ATA"),]

world <- spTransform(world, CRS("+proj=wintri"))

dat_url <- getURL("https://gist.githubusercontent.com/hrbrmstr/7a0ddc5c0bb986314af3/raw/6a07913aded24c611a468d951af3ab3488c5b702/pop.csv")
pop <- read.csv(text=dat_url, stringsAsFactors=FALSE, header=TRUE)

map <- fortify(world, region="iso_a3")

# data frame of markers 
labs <- data.frame(lat=c(39.5, 35.50), 
                   lon=c(-98.35, 103.27), 
                   title=c("US", "China"))

# pre-project them to winkel-tripel
coordinates(labs) <-  ~lon+lat
c_labs <- as.data.frame(SpatialPointsDataFrame(spTransform(
  SpatialPoints(labs, CRS("+proj=longlat")), CRS("+proj=wintri")),
  labs@data))

gg <- ggplot()
gg <- gg + geom_map(data=map, map=map,
                    aes(x=long, y=lat, map_id=id, group=group),
                    fill="#ffffff", color=NA)
gg <- gg + geom_map(data=pop, map=map, color="white", size=0.15,
                    aes(fill=log(X2013), group=Country.Code, map_id=Country.Code))
gg <- gg + geom_point(data=c_labs, aes(x=lon, y=lat), size=4)
gg <- gg + scale_fill_gradient(low="#f7fcb9", high="#31a354", name="Population by Country\n(2013, log scale)")
gg <- gg + labs(title="2013 Population")
gg <- gg + coord_equal(ratio=1)
gg <- gg + ggthemes::theme_map()
gg <- gg + theme(legend.position="bottom")
gg <- gg + theme(legend.key = element_blank())
gg <- gg + theme(plot.title=element_text(size=16))
gg

在此輸入圖像描述

暫無
暫無

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

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