在 R 中创建制图
Creating a Cartogram in R
我正在尝试在 R 中制作图表以显示英国每个地区的发生次数。
我的数据目前是这样的:
Area Occurences lon lat
1 Greater London East North UK 200 -0.0936496 51.43092
2 Lambeth and Southwark UK 16 -0.1178424 51.49351
3 Black Country UK 58 -2.0752861 52.52005
4 Glasgow UK 45 -4.2518060 55.86424
5 Leeds UK 331 -1.5490774 53.80076
6 Sth Herts or Watford UK 210 -0.3903200 51.65649
我有所有 120 个观测值的经度和纬度。到目前为止,我已使用以下代码尝试制作地图:
library(rgdal)
library(cartogram)
library(tmap)
library(maptools)
ukgrid = "+init=epsg:27700"
data(wrld_simpl)
afr <- wrld_simpl[wrld_simpl$NAME == "United Kingdom",]
afr <- spTransform(afr, CRS(ukgrid))
# construct cartogram
afrc <- cartogram(afr, "POP2005", itermax=5)
# plot it
tm_shape(afrc) + tm_fill("POP2005", style="jenks") +
tm_borders() + tm_layout(frame=F)
这会生成英国地图,但我不确定如何将我自己的数据用于制图,而不是地图所基于的 'wrld_simpl' 数据中的人口数据。
有没有人有这样做的经验或知道另一种方法来达到预期的结果?谢谢!
我假设你的数据是 SpatialPointsDataFrame
?您需要找到一个合适的 shapefile (SpatialPolygonsDataFrame
),其中每个 UK 区域都对应一个多边形。形状的一个很好的来源是 http://www.naturalearthdata.com/
这是一个应该与您的情况类似的示例:
library(rgeos)
library(sp)
library(maptools)
library(tmap)
library(tmaptools)
library(cartogram)
data(wrld_simpl)
data(metro)
## count occurences per polygon: in this case, the number of cities per country
x <- over(metro, wrld_simpl)
res <- table(x$ISO3)
dat <- data.frame(iso_a3=names(res), count=as.vector(res))
## add counts to polygon shape
wrld_simpl <- append_data(wrld_simpl, dat, key.shp = "ISO3", key.data = "iso_a3", ignore.na = TRUE)
## remove 0 counts
wrld_simpl_sel <- wrld_simpl[which(wrld_simpl$count>0), ]
## apply cartogram (doesn't result in a nice cartogram because the shape is too detailed and the counts are too few)
wrld_simpl_carto <- cartogram(wrld_simpl_sel, weight = "count", itermax = 1)
## plot it
qtm(wrld_simpl_carto)
我正在尝试在 R 中制作图表以显示英国每个地区的发生次数。
我的数据目前是这样的:
Area Occurences lon lat
1 Greater London East North UK 200 -0.0936496 51.43092
2 Lambeth and Southwark UK 16 -0.1178424 51.49351
3 Black Country UK 58 -2.0752861 52.52005
4 Glasgow UK 45 -4.2518060 55.86424
5 Leeds UK 331 -1.5490774 53.80076
6 Sth Herts or Watford UK 210 -0.3903200 51.65649
我有所有 120 个观测值的经度和纬度。到目前为止,我已使用以下代码尝试制作地图:
library(rgdal)
library(cartogram)
library(tmap)
library(maptools)
ukgrid = "+init=epsg:27700"
data(wrld_simpl)
afr <- wrld_simpl[wrld_simpl$NAME == "United Kingdom",]
afr <- spTransform(afr, CRS(ukgrid))
# construct cartogram
afrc <- cartogram(afr, "POP2005", itermax=5)
# plot it
tm_shape(afrc) + tm_fill("POP2005", style="jenks") +
tm_borders() + tm_layout(frame=F)
这会生成英国地图,但我不确定如何将我自己的数据用于制图,而不是地图所基于的 'wrld_simpl' 数据中的人口数据。
有没有人有这样做的经验或知道另一种方法来达到预期的结果?谢谢!
我假设你的数据是 SpatialPointsDataFrame
?您需要找到一个合适的 shapefile (SpatialPolygonsDataFrame
),其中每个 UK 区域都对应一个多边形。形状的一个很好的来源是 http://www.naturalearthdata.com/
这是一个应该与您的情况类似的示例:
library(rgeos)
library(sp)
library(maptools)
library(tmap)
library(tmaptools)
library(cartogram)
data(wrld_simpl)
data(metro)
## count occurences per polygon: in this case, the number of cities per country
x <- over(metro, wrld_simpl)
res <- table(x$ISO3)
dat <- data.frame(iso_a3=names(res), count=as.vector(res))
## add counts to polygon shape
wrld_simpl <- append_data(wrld_simpl, dat, key.shp = "ISO3", key.data = "iso_a3", ignore.na = TRUE)
## remove 0 counts
wrld_simpl_sel <- wrld_simpl[which(wrld_simpl$count>0), ]
## apply cartogram (doesn't result in a nice cartogram because the shape is too detailed and the counts are too few)
wrld_simpl_carto <- cartogram(wrld_simpl_sel, weight = "count", itermax = 1)
## plot it
qtm(wrld_simpl_carto)