繁体   English   中英

R ggplot2:绘制多个线段以连接地图上的成对点

[英]R ggplot2: draw multiple line segments connecting pairs of points on map

考虑具有多对点的地图。 使用ggplot2 ,如何将每对点与线段相连?

考虑以下可重现的示例。

# Load libraries.
library(ggmap)    # for getting map
library(ggplot2)  # for plots

# Create data frame of points on the map.
data <- data.frame(p1 = c(1, 3, 5), p2 = c(2, 4, 6), 
                   lat_p1 = c(37.78, 37.75, 37.73), 
                   lon_p1 = c(-122.41, -122.40, -122.405), 
                   lat_p2 = c(37.77, 37.75, 37.72), 
                   lon_p2 = c(-122.43, -122.42, -122.415))
data
  p1 p2 lat_p1   lon_p1 lat_p2   lon_p2
1  1  2  37.78 -122.410  37.77 -122.430
2  3  4  37.75 -122.400  37.75 -122.420
3  5  6  37.73 -122.405  37.72 -122.415

# Get map. 
map <- get_map(location = c(left = -122.523, bottom = 37.69,
                            right = -122.35, top = 37.813),
               maptype = "roadmap", source = "osm", color = "bw")

# Plot points on the map. 
ggmap(map) + 
  geom_point(data = data, aes(x = lon_p1, y = lat_p1), color = "red", 
             size = 1) + 
  geom_point(data = data, aes(x = lon_p2, y = lat_p2), color = "purple", 
             size = 1)

特别是如何将图中的红色和紫色点与线段连接?

有几个相关的问题,它们使用geom_line()通过多个点绘制单个线段。 但是,我还没有看到这样的帖子。

在此处输入图片说明

这是修改数据框以获得所需图形的解决方案。

# Load libraries (same as before).
library(ggmap)    # for getting map
library(ggplot2)  # for plots

# Modify the original data frame.
data2 <- data.frame(point = c(1, 3, 5, 2, 4, 6), 
                    pair = c('A', 'B', 'C', 'A', 'B', 'C'), 
                    color.group = c('foo', 'foo', 'foo', 'bar', 'bar', 'bar'), 
                    lat = c(37.78, 37.75, 37.73, 37.77, 37.75, 37.72), 
                    lon = c(-122.41, -122.40, -122.405, -122.43, -122.42, -122.415))
data2
  point pair color.group   lat      lon
1     1    A         foo 37.78 -122.410
2     3    B         foo 37.75 -122.400
3     5    C         foo 37.73 -122.405
4     2    A         bar 37.77 -122.430
5     4    B         bar 37.75 -122.420
6     6    C         bar 37.72 -122.415

# Get map (same as before).
map <- get_map(location = c(left = -122.523, bottom = 37.69,
                            right = -122.35, top = 37.813),
               maptype = "roadmap", source = "osm", color = "bw")

# Plot map with line segments. 
ggmap(map) + 
  geom_point(data = data2, aes(x = lon, y = lat, color = color.group)) + 
  geom_line(data = data2, aes(x = lon, y = lat, group = pair))

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM