Точки соединения в ggmap на основе идентификатора - PullRequest
0 голосов
/ 25 апреля 2019

Я хотел бы построить структуры на карте в соответствии с их координатами.В моем наборе данных у меня есть координаты широты и долготы, но у меня также есть идентификатор структуры (id) и идентификатор структуры, которая ведет к наблюдаемой структуре (id_conn).

Я бы тоже хотел провести границу между «связанными» точками.Например: наблюдение с идентификатором 0 будет просто точкой.Но наблюдение с идентификатором 101 имеет id_conn 0, и поэтому я хотел бы, чтобы между структурами 0 и 101 была линия.

Ниже приведен пример кода, в котором я просто строю структуры без линийкурс.Я прошу прощения, если я также должен предоставить свой API-ключ Static Maps здесь - я думаю, что они индивидуальны, хотя.Из примера набора данных видно, что созданная сеть иногда сбрасывается на предыдущий идентификатор, поэтому id_conn не всегда является идентификатором, найденным в предыдущем наблюдении.Если бы кто-нибудь мог дать понимание здесь, я был бы признателен.

install.packages("ggmap")
library(ggmap)

register_google(##your Static Maps API key##,
                account_type = "standard")

Gmap <- get_map(location = c(lon = 0, lat = 0), zoom = 9)

aux <- data.frame(
  id = c(0, 101, 102, 103, 104, 105, 106, 201, 202, 203, 204, 205),
  lat_coord = c(0, 0.1, 0.2, 0.3, 0.3, 0.4, 0.5, 0, 0, 0.1, 0, -0.1),
  lon_coord = c(0, 0.1, 0.2, 0.2, 0.3, 0.2, 0.2, 0.2, 0.3, 0.4, 0.4, 0.4),
  id_conn = c(NA, 0, 101, 102, 102, 103, 105, 101, 201, 202, 202, 202)
)

ggmap(Gmap) +
  geom_point(data=aux, aes(x=lon_coord, y=lat_coord)) +
  theme_void() +
  theme(legend.key = element_rect(fill = "black")) +
  coord_equal(ratio=1)

1 Ответ

1 голос
/ 25 апреля 2019

Вы ищете что-то подобное?

aux %>%
  inner_join(aux, by = c("id_conn" = "id")) %>%
  select(-id_conn.y) -> aux2


ggmap(Gmap) +
  geom_segment(data = aux2, aes(x = lon_coord.x, y = lat_coord.x, 
                                xend = lon_coord.y, yend = lat_coord.y), 
               color = "yellow", arrow = arrow(length = unit(0.2,"cm"))) +
  geom_point(aes(x=lon_coord.x, y=lat_coord.x),data=aux2) +
  geom_text(aes(x=lon_coord.x, y=lat_coord.x, label = id), data=aux2, hjust = -0.5) 

Секретный ингредиент - geom_segment(), который позволяет добавлять отрезки. Вы можете настроить внешний вид стрелок по своему усмотрению.

enter image description here

...