1

我似乎无法从空间对象的图中删除边距。在这种情况下,发布到其他类型地块的解决方案似乎不起作用。Parmaioma论点也失败了。非常感谢您的建议。

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')

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

在此处输入图像描述

4

1 回答 1

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(),以使绘制的区域不会向南走,但我对此并不满意。

在此处输入图像描述

于 2013-07-13T20:39:38.097 回答