34

我正在使用 ggplot 绘制多面图,并且无法弄清楚如何在保持 xy 纵横比固定的同时在每个方面允许“自由”比例(这样小区域看起来不会太小)。

这是一个简化的示例:

require(maps)
require(ggplot2)

map_nz <- subset(fortify(map_data('nz')),
                 region %in% c("South.Island ", "North.Island "))
gg_nz <- qplot(long, lat, data=map_nz, geom="polygon", group=group)

我现在有一个新西兰北岛和南岛的地块。我可以对此进行分面并以固定的纵横比显示它,如下所示:

gg_nz + coord_fixed() + facet_wrap(~region)

结果如下所示:

新西兰地图 - 固定纵横比

请注意,在北岛方面浪费了相当多的空间。我希望它占用更多的可用空间。我可以像这样释放秤:

gg_nz + facet_wrap(~region, scales="free")

结果如下:

新西兰地图 - 自由比例

问题是每个刻面的 xy 纵横比不再是 1:1。我很高兴每个方面都有不同的比例,但在方面我想保留纵横比。

我尝试了以下但没有成功:

gg_nz + facet_wrap(~region, scales="free") + coord_fixed()

大概是overrides中的scale参数。有什么建议么?facet_wrapcoord_fixed

更新:为了给出更生动的说明,美国一些州也出现了同样的现象:

固定坐标(使用coord_fixedor coord_equal):

美国地图 - 固定方面 免费坐标(使用scales = free):

美国地图 - 自由比例

这些地图都不是理想的:首先,特拉华州很小。在第二个中,纵横比非常扭曲。例如,新泽西州是一个狭窄的州,被拉伸得太宽了。

4

3 回答 3

17

theme(aspect.ratio = 1)作品。

gg_nz + facet_wrap(~region, scales="free") + theme(aspect.ratio = 1)

于 2017-05-30T20:18:29.013 回答
8

更新:

我相信您正在寻找的是裁剪或放大单个方面的能力。换句话说,为每个方面独立调整ylims 和s。xlim看起来这样的功能已被请求但尚未实现(https://github.com/hadley/ggplot2/issues/187

如果space=free下面的选项不起作用,另一种方法是废弃构面并使用网格布局和/或视口手动打印每个图。


使用facet_grid代替facet_wrap并添加space=free

gg_state + facet_grid(~region, scales = "free_x", space="free")

在此处输入图像描述


原答案:

也许不是自由地拥有两个轴比例,而是只有一个比例:

map_state <- subset(fortify(map_data('state')),
                 region %in% c("california", "nevada"))
gg_state <- qplot(long, lat, data=map_state, geom="polygon", group=group)
gg_state + facet_wrap(~region, scales="free_x")

在此处输入图像描述

于 2013-04-28T01:35:09.773 回答
1

coord_equal帮助吗?

 gg_nz + facet_wrap(~region, scales="free") + coord_equal()

编辑

您可以使用grid.arrange手动将绘图放在页面上,固定宽度和高度。这似乎可以解决问题,但我无法使其与facet()功能一起使用。感谢@mnel 的这篇文章

nz_sth <- qplot(long, lat, data=map_nz[map_nz$region == "South.Island ",], geom="polygon", group=group) + coord_fixed()
nz_nth <- qplot(long, lat, data= map_nz[ map_nz$region == "North.Island " , ] , geom="polygon", group=group) + coord_fixed()


grid.arrange( heights=unit(0.75, "npc") , widths=unit(0.5, "npc") , nz_sth,nz_nth, ncol=2)

在此处输入图像描述

于 2013-04-27T23:55:44.750 回答