2

我正在尝试做一些在 ggplot 中看起来应该相当简单的事情。我怀疑我没有在寻找正确的术语,因此什么也没有出现。基本上我有来自一个数据帧的数据,并在另一个数据帧中映射数据。我希望 facet_wrap 函数在确定适当的比例时忽略地图数据框中的数据。这是一些可重现的代码:

mapdata <- map_data("world")
df1 <- data.frame(category="A", lon=rnorm(20, -160, 3), lat=rnorm(20, 55, 3))
df2 <- data.frame(category="B", lon=rnorm(20, -130, 3), lat=rnorm(20, 52, 3))
df <- rbind(df1, df2)
g <- ggplot() + geom_point(data=df, aes(lon, lat)) + facet_wrap("category", scales="free")

没有地图的点 但是现在如果我尝试为每个方面添加一个地图,它会使用两个数据集中的范围。

g + geom_polygon(data=mapdata, aes(x=long, y=lat, group=group))

地图点

如何告诉 ggplotdf在计算限制时仅使用数据框?基本上我想将子图集中在这些点上,但是有一张地图可以显示它们的位置。任何建议将不胜感激。

4

1 回答 1

0

问题之前已评论过,因此没有本地方法可以这样做。子集可能是你最好的选择。向 中添加一个类别mapdata,并且facet_wrap足够聪明,可以区分不同类别的限制。

mapdata$category <- ifelse(
  findInterval(mapdata$lon, range(df1$lon)) == 1 & 
    findInterval(mapdata$lat, range(df1$lat)) == 1, 
  "A",
  ifelse(
    findInterval(mapdata$lon, range(df2$lon)) == 1 & 
      findInterval(mapdata$lat, range(df2$lat)) == 1,
    "B",
    NA)
)

g + geom_polygon(data=mapdata[!is.na(mapdata$category), ], aes(x=long, y=lat, group=group))

在此处输入图像描述

需要一些额外的工作才能使这个看起来漂亮(也许更大的子集区域?),但你明白了。

于 2014-04-02T06:35:25.117 回答