Посмотрите на код для функции zip.plot
, и вы увидите, что это просто. Он объединит данные вашего почтового индекса с данными долготы и широты data(zips)
. Вы заметите, что он строит точки, но не имеет функции для их соединения, и не возвращает построенные точки.
Вы можете адаптировать аналогичную функцию, которая соответствует вашим потребностям. Если вы включите library(muRL)
, вы можете загрузить zip-данные на data(zips)
. После построения точек можно добавить линии для их соединения на основе переменной trip
.
Например, создать новую функцию zip.plot.new
:
library(muRL)
data(zips)
zip.plot.new <- function(data, map.type = "state", ...){
data.z <- merge(data, zips[,c("zip", "lat", "lon")], by.x = "zip", by.y = "zip", all.x = TRUE)
maps::map(map.type, ...)
points(data.z$lon, data.z$lat, cex = 1, col = "black", pch = 20)
mapply(lines, split(data.z$lon, data.z$trip), split(data.z$lat, data.z$trip))
}
Сюда входит mapply(lines...
чтобы соединить точки с помощью trip
.
Затем вы можете использовать свой фрейм данных, преобразовать в более длинную форму и вызвать эту новую функцию:
library(tidyverse)
df1 %>%
pivot_longer(cols = starts_with("zip_"), names_to = c(".value", "group"), names_sep = "_") %>%
zip.plot.new(.)
![zip code plot](https://i.stack.imgur.com/OIDUi.png)
Обратите внимание, что почтовый индекс 12909
не был сопоставлен в данных (кажется недействительным?).
Данные
df1 <- data.frame(trip = c(1,2,3,4),
zip_1 = c("55803","87112","55107","66006"),
zip_2 = c("12909","93703","12205","78210"))
Редактировать : Вот ggplot
версия:
library(ggmap)
library(maps)
library(ggplot2)
library(tidyverse)
MainStates <- map_data("state")
point_data <- df1 %>%
pivot_longer(cols = starts_with("zip_"), names_to = c(".value", "group"), names_sep = "_") %>%
mutate(zip = factor(zip, levels = levels(zips$zip))) %>%
left_join(zips)
ggplot() +
geom_polygon(data=MainStates, aes(x=long, y=lat, group=group), color = "black", fill = "white") +
geom_point(data = point_data, aes(x = lon, y = lat, group = trip)) +
geom_line(data = point_data, aes(x = lon, y = lat, group = trip)) +
coord_fixed(1.3) +
theme_nothing()