【问题标题】:Removing top/bottom margin from ggplot map after coord_equal()在 coord_equal() 之后从 ggplot 地图中删除顶部/底部边距
【发布时间】:2014-12-08 10:00:51
【问题描述】:

我在 Fedora 20 上使用 R 3.1.2,当使用 coord_equal() 时,在 ggplot() 生成的地图的顶部和底部出现大空白区域时遇到问题。查看这段代码:

library(maps)
library(ggplot2)
jp <- map_data("world",region=c("Japan"))
options <- par(mar=c(0,0,0,0),oma=c(0,0,0,0))
g <- ggplot(jp,aes(x=long,y=lat,group=group,fill=region))
g <- g + geom_polygon(colour="black")
g <- g + labs(x=NULL,y=NULL)
#g <- g + coord_equal(ratio=1/2)
g <- g + theme(axis.text.x=element_blank(),axis.text.y=element_blank())
g <- g + theme(plot.background=element_rect(fill="lightblue"))
g

注释掉 coord_equal() 行后,您看到的是填充输出区域的日本地图。但是,如果您取消注释 coord_equal():

library(maps)
library(ggplot2)
jp <- map_data("world",region=c("Japan"))
options <- par(mar=c(0,0,0,0),oma=c(0,0,0,0))
g <- ggplot(jp,aes(x=long,y=lat,group=group,fill=region))
g <- geom_polygon(colour="black")
g <- g + labs(x=NULL,y=NULL)
g <- g + coord_equal(ratio=1/2)
g <- g + theme(axis.text.x=element_blank(),axis.text.y=element_blank())
g <- g + theme(plot.background=element_rect(fill="lightblue"))
g

发生的情况是地图面板被转换为高度的一半(相同的宽度),浅蓝色填充可以清楚地看到。问题是绘图区域没有改变,所以实际上你得到的是绘图顶部和底部的大空白区域。使用 par(mar) 没有任何效果,因为这些不是边距,但显然如果绘图包含在文档中,它们看起来就像是巨大的、不必要的边距。

我可以使用哪些选项来防止这些空白区域出现(或在事后修剪它们)?我应该说这只是一个最小的例子。 “在现实生活中”地图更加复杂,并且必须动态生成。也就是说,面板的坐标和尺寸不应该改变,所以一个可能的黑客是生成图像,然后剪掉我需要的部分。不过,如果可以避免这些事情,那就更好了。

谢谢!

【问题讨论】:

    标签: r map ggplot2


    【解决方案1】:

    这似乎只是在交互工作时才会出现的问题。如果您使用ggsave 来实际保存生成的图像,则可以解决问题。无论coord_equal(ratio=1/2) 的设置如何,以下实际上都会导致相同的结果:

    ggsave('japan.png', height=5, width=10, plot=g)
    

    【讨论】:

    • 这很有趣。似乎暗示 ggplot() 确实具有这种能力......这只是弄清楚如何访问它的问题!
    猜你喜欢
    • 1970-01-01
    • 2015-04-24
    • 2020-12-05
    • 2014-06-05
    • 1970-01-01
    • 2018-06-28
    • 2017-08-02
    • 2017-10-22
    • 1970-01-01
    相关资源
    最近更新 更多