Огранка с несколькими наборами данных в ggplot: как установить масштабы

Я пытаюсь сделать что-то, что кажется довольно простым в 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))

Точки с картами

Как мне указать ggplot использовать только фрейм данных df при расчете ограничений? В основном я хочу сосредоточить сюжеты на точках, но иметь карту, показывающую, где они находятся. Любые предложения будут ценны.


person Cole Monnahan    schedule 31.03.2014    source источник
comment
Я пытаюсь придумать что-то лучшее, чем просто подмножество данных вашей карты или использование coord_cartesian, но я часто имею дело с картами.   -  person joran    schedule 01.04.2014


Ответы (1)


проблема была прокомментирована ранее, поэтому нет собственного способа сделать это. Подмножество, вероятно, ваш лучший выбор здесь. Добавьте категорию в 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))

введите здесь описание изображения

Требуется некоторая дополнительная работа, чтобы это выглядело красиво (может быть, большая область для подмножества?), но вы поняли идею.

person tonytonov    schedule 02.04.2014
comment
tonytonov -- Спасибо за эту ссылку. Я поиграю с вашим предложением и надеюсь на собственное решение в будущем. - person Cole Monnahan; 03.04.2014