ggplot2的coord_map()会忽略plot.background并产生白色边距–如何删除它们?

时间:2019-07-16 06:35:05

标签: r ggplot2

问题

问候,我试图通过将ggplot2参数theme()设置为例如,使用plot.background绘制具有深色背景的地图。 element_rect(fill = "#000000"),但使用coord_map()从笛卡尔坐标系切换到地图投影会引入白色边距,只有通过将图的大小调整为与地图区域相同的比例才能删除该空白。

我如何删除此边距并将plot.background参数指定的填充颜色应用于整个图,而不论其比例如何?

MWE

nz <- map_data("nz")
ggplot(nz, aes(x = long, y = lat, group = group)) +
    geom_polygon(fill = "white", colour = "black") +
    coord_map() +
    theme_void() +
    theme(plot.background = element_rect(fill = "#000000"))

输出

Output with a white margin

预期输出

Expected output without a white margin

更新

经过大约两个小时的尝试不同的方法,并且想知道R绘图,尤其是ggplot2如何如此笨拙,我终于找到了解决方案here,但是它需要另一个库和其他步骤来产生这种概念上的基本调整,首先应该真的是默认设置,所以肯定有一个本机解决方案……对吗? ?

1 个答案:

答案 0 :(得分:1)

grid软件包有一个解决方案,ggplot2使用该软件包来绘制图表。首先,通过将绘图背景颜色也设置为黑色,我将对您的绘图代码进行小的调整:

g <- ggplot(nz, aes(x = long, y = lat, group = group)) +
  geom_polygon(fill = "white", colour = "black") +
  coord_map() +
  theme_void() +
  theme(plot.background = element_rect(fill = "#000000", colour = "#000000"))

接下来,我们将g转换为gtable并使用网格包进行绘制:

library(grid)
gt <- ggplotGrob(g)
grid.newpage()
# Draw a black rectangle
grid.draw(rectGrob(gp = gpar(fill = "#000000")))
grid.draw(gt)

问题在于许多坐标函数为绘图设置了固定的长宽比,这反过来又会影响以绝对尺寸定义的其他绘图元素。