Построение координат нескольких точек на карте Google в R
Я хотел построить координаты на карте Google при наличии идентификатора точки:
Образец данных:
coordinates id
1 (7.1735, 45.8688) 2
2 (7.17254, 45.8689) 3
3 (7.17164, 45.8692) 4
4 (7.18018, 45.8716) 5
5 (7.17807, 45.8701) 6
6 (7.17723, 45.8692) 7
7 (7.17524, 45.8681) 8
8 (7.18141, 45.8718) 9
9 (7.1793, 45.8702) 10
10 (7.17836, 45.8707) 11
11 (7.17519, 45.8697) 12
12 (7.17938, 45.8708) 13
13 (7.17551, 45.8693) 14
14 (7.17684, 45.8694) 15
15 (7.18099, 45.8726) 17
16 (7.18015, 45.8725) 18
17 (7.18122, 45.8736) 19
18 (7.17491, 45.8692) 20
19 (7.15497, 45.8706) 25
20 (7.1534, 45.8695) 28
21 (7.15265, 45.8699) 29
22 (7.15442, 45.87) 31
23 (7.1561, 45.8698) 32
24 (7.184, 45.896) GSBi_1
25 (7.36, 45.901) GSBi__1
26 (7.268, 45.961) GSBj__1
27 (7.276, 45.836) GSBj_1
28 (7.272, 45.899) GSB
29 (7.16667, 45.8667) GSB_r
2 ответа
Вместо того, чтобы запрашивать карту "Швейцария" в Google, вам следует запросить карту определенного местоположения, указав долготу / широту и желаемый масштаб (и, возможно, масштаб). Тогда вам не придется использовать coord_map()
и размыть ваше изображение.
Вот основы, вы можете поиграть с цветами и размерами, как в любом ggplot:
library(ggplot2)
library(ggmap)
# copying text off screen
# since the OP did not use dput()
data<-read.table("clipboard")
# reformat
data=data[,-1]
names(data)=c("lon","lat","id")
data$lon <- as.numeric(gsub('[\\(\\)\\,]', '', data$lon))
data$lat <- as.numeric(gsub('[\\(\\)\\,]', '', data$lat))
head(data)
# lon lat id
# 1 7.17350 45.8688 2
# 2 7.17254 45.8689 3
# 3 7.17164 45.8692 4
# etc
# determine a reasonable center for map,
# this could fail in some places (near poles, 180th meridian)
# also google appears to shift things slightly
center = paste(min(data$lat)+(max(data$lat)-min(data$lat))/2,
min(data$lon)+(max(data$lon)-min(data$lon))/2, sep=" ")
# get map image from google
map <- get_map(location = center, zoom = 11, maptype = "terrain",
source = "google")
# start a ggplot. it won't plot til we type p
p <- ggmap(map)
# add text labels, these will overlap
p <- p + geom_text(data=data,aes(x = lon, y = lat,
label = id),
colour="white",size=4,hjust=0, vjust=0)+
theme(legend.position = "none")
# add points last so they are on top
p <- p + geom_point(data=data,aes(x=lon, y=lat),colour="white",size=2)
# display plot
p
Это естественно описано в ?get_map
а также ?get_googlemap
,
Одна из проблем с построением ваших точек в том, что если вы используете zoom=10
в функции get_map()
тогда ваши точки находятся вне карты, и они хотят быть построены, поэтому я использовал zoom=5
вместо.
library(ggmap)
map <- get_map(location = 'Switzerland', zoom = 5,
maptype = "terrain", source = "google")
Для построения карты я использовал функцию ggmap()
, Чтобы добавить очки geom_point()
может быть использован. Для этого ваши образцы данных были сохранены как фрейм данных df
с колоннами x
, y
а также id
, Чтобы приблизить к точкам coord_map()
может быть использован.
p <- ggmap(map)
p <- p +geom_point(data=df,aes(x=x,y=y))+
coord_map(xlim=c(7,8),ylim=c(45.5,46))
print(p)
Если вам нужно добавить метки для каждой точки, добавьте эту строку на карту p
annotate("text",x=df$x,y=df$y,label=df$id)