我正试图将地图绘制限制在特定区域. 因为后者弄乱了多边形,所以coord_map 优先选择scale_x_continuous和y等价.但在这里我发现它因某种原因失败了.这是我的代码(下载一个57kb的shapefile):
require(maptools)
require(ggplot2)
download.file('https://dl.dropboxusercontent.com/u/46043231/UK.zip', "uk.zip", method="internal", mode="wb")
unzip('uk.zip')
uk = readShapePoly('uk_outline_1000m.shp')
print(bbox(uk))
min max
x 259.9625 655566.4
y 7211.7025 1218558.9
uk2 = fortify(uk)
(p = ggplot(uk2, aes(x=long, y=lat, group=group)) + geom_polygon() + coord_equal())
Run Code Online (Sandbox Code Playgroud)

但是当coord_map使用时,情节消失了:
p + coord_map(xlim=c(0, 630000), ylim=c(0, 1000000))
Run Code Online (Sandbox Code Playgroud)

知道发生了什么事吗?
我会尝试这样的东西来测试一些选项.
library(maptools)
library(ggplot2)
library(rgdal)
library(raster)
library(latticeExtra)
Run Code Online (Sandbox Code Playgroud)
download.file('https://dl.dropboxusercontent.com/u/46043231/UK.zip',
"uk.zip", method="internal", mode="wb")
unzip('uk.zip')
uk <- readOGR(dsn = getwd(), layer = 'uk_outline_1000m')
Run Code Online (Sandbox Code Playgroud)
假设数据使用OSGB 1936 /英国国家网格.
有关SpatialReference的更多信息
proj4string(uk) <- CRS('+init=epsg:27700') # EPSG 27700
extent(uk)
bb.uk <- as(extent(uk), 'SpatialPolygons') # a spatial object
proj4string(bb.uk) <- CRS('+init=epsg:27700')
Run Code Online (Sandbox Code Playgroud)
写下uk bbox的投影shapefile.我会写出来用QGIS来映射图层.这将是我的参考系统.
writeOGR(as(bb.uk, 'SpatialPolygonsDataFrame'),
dsn = getwd(),
layer = 'bbuk2_bng', driver = 'ESRI Shapefile')
Run Code Online (Sandbox Code Playgroud)
所需的边界框.使用投影坐标
bb.uk2 <- as(extent(c(0, 630000), c(0, 1000000)), 'SpatialPolygons')
proj4string(bb.uk2) <- CRS('+init=epsg:27700')
Run Code Online (Sandbox Code Playgroud)
编写用户bbox的投影shapefile
writeOGR(as(bb.uk2, 'SpatialPolygonsDataFrame'),
dsn = getwd(),
layer = 'bbuk2user_bng', driver = 'ESRI Shapefile')
Run Code Online (Sandbox Code Playgroud)

基础情节
plot(uk, col = 'grey50', axes = T, xlim=c(-50000, 705566.4),
ylim=c(-50000, 1325000))
plot(bb.uk, add = T)
plot(bb.uk2, border = 'red', add = T)
Run Code Online (Sandbox Code Playgroud)

spplot
我采取任意窗口扩大情节区域.
sp::spplot(uk, zcol = 'NAME_ISO', scales = list(draw = TRUE),
xlim=c(-50000, 705566.4), ylim=c(-50000, 1325000),
col.regions="grey90") +
latticeExtra::layer(sp.polygons(bb.uk, fill = NA, col = 'blue')) +
latticeExtra::layer(sp.polygons(bb.uk2, fill = NA, col = 'red'))
Run Code Online (Sandbox Code Playgroud)

带有投影图层的ggmap
uk.df = fortify(uk) # admin
bbuk.df <- fortify(bb.uk) # country bbox extent
bbuk2.df <- fortify(bb.uk2) # user bbox extent
Run Code Online (Sandbox Code Playgroud)
绘制它
p <- ggplot() + geom_polygon(data = uk.df, aes(x=long, y=lat, group=group)) +
geom_polygon(data = bbuk.df, aes(x=long, y=lat, group=group),
colour = 'blue', fill = NA) +
geom_polygon(data = bbuk2.df, aes(x=long, y=lat, group=group),
colour = 'red', fill = NA) +
coord_equal() # cartesian
p
Run Code Online (Sandbox Code Playgroud)

用用户边界框绘制它
p + coord_equal(xlim=c(0, 630000), ylim=c(0, 1000000))
Run Code Online (Sandbox Code Playgroud)

WGS84未投影坐标参考系
p.wgs84 <- CRS("+init=epsg:4326") # WGS84 Long Lat
Run Code Online (Sandbox Code Playgroud)
将投影图层转换为WGS84
uk.wgs89 <- spTransform(uk, p.wgs84)
Run Code Online (Sandbox Code Playgroud)
地理bbox英国
bbuk.wgs84 <- as(as(extent(uk.wgs89), 'SpatialPolygons'),
'SpatialPolygonsDataFrame')
Run Code Online (Sandbox Code Playgroud)
用户范围的地理bbox
bbuk2.wgs84 <- spTransform(bb.uk2, p.wgs84)
bbuk2.wgs84 <- as(bbuk2.wgs84, 'SpatialPolygonsDataFrame')
Run Code Online (Sandbox Code Playgroud)
用ggplot和笛卡尔地图绘制它
uk.df = fortify(uk.wgs89) # admin
bbuk.df <- fortify(bbuk.wgs84) # country bbox extent
bbuk2.df <- fortify(bbuk2.wgs84) # user bbox extent
Run Code Online (Sandbox Code Playgroud)

结果不是我所期望的.我不明白为什么红盒子会扭曲.