编辑:此答案于 2019 年 3 月 9 日重写,以证明数据集存在问题。绘图方法仍然正确,但输出可能不是我们想要的。
我把你的问题的意思是,
如何绘制地图,以便输出图像文件中的地图数据周围没有填充。
这意味着在绘图周围绘制没有边距的地图图形。另一个要求是以正确的纵横比和定义的纬度和经度范围绘制地图。对于世界地图,我们需要从北纬 90 度到南纬 90 度,以及从西经 180 度到东经 180 度。
require(maptools)
data(wrld_simpl)
# set up the output file
png('test.png', width=1200, height = 600, res = 300)
# define the plot and margins
par(ann = FALSE,
bg = "white",
bty = "n",
mai = c(0,0,0,0),
mgp = c(0, 0, 0),
oma = c(0,0,0,0),
omd = c(0,1,0,1),
omi = c(0,0,0,0),
usr = c(-180, 180, -90, 90),
pin = c(4,2),
plt = c(0,1,0,1),
pty = "m",
xaxs = 'i',
xaxt = 'n',
xpd = FALSE,
yaxs = 'i',
yaxt = 'n')
# plot the world map
plot(wrld_simpl,
col='grey',
bg='white',
border=NA,
ann=FALSE,
axes = FALSE)
# plot points at extremes
par(new = TRUE)
plot(c(0,0,-180,180),c(90,-90,0,0), type = "p", col = "red",pch="+", cex=0.5)
dev.off()
browseURL('test.png')
该图形被定义为从北极延伸到南极,并往返于反子午线。这是使用par()
设置图形的 usr... 部分完成的。
为了展示绘图相对于图形边缘的范围,我添加了 4 个红十字。它们位于北极和南极,以及沿赤道 +/- 180 度的位置,这也是我设定情节界限的地方。
这些点显示地图的大小是正确的东西方向和南北方向。北极下没有陆地,所以北方的白色区域是正确的。如果忘记北极地理,它可能看起来像一个白色的边界间隙。但是南极以北的南极洲有一些空白区域,应该显示为陆地(对于某些读者来说,这似乎是图像周围的边界)。我猜想在遥远的南方(因此不需要数据点)没有海洋或边界这一事实会造成麻烦。我认为wrld_simpl
可以调整其中的数据来解决这个问题。
另一种选择是进行调整par()
,以使绘制的区域不会向南走,但我对此并不满意。