从地图中删除边距

时间:2013-07-13 12:20:21

标签: r plot

我似乎无法从空间对象的图中移除边距。在这种情况下,发布到其他类型图表的解决方案似乎不起作用。 Par的maioma参数也会失败。非常感谢您的建议。

library(maptools)
data(wrld_simpl)
bbox = cbind(c(179,179,-179,-179,179), c(89,-89,-89,89,89))

png('test.png', width=1000, height=500)
par(mai=c(0,0,0,0), oma=c(0,0,0,0))
plot(wrld_simpl, col='grey', bg='white', border=NA)
lines(bbox, col='red', lwd=3)
dev.off()
browseURL('test.png')

红色边界框应该只在图形输出边框内绘制。

enter image description here

1 个答案:

答案 0 :(得分:7)

编辑:此答案于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(),以便绘制的区域不会向南移动,但我对此并不满意。

enter image description here