3

ポイントIDの存在下で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  
4

2 に答える 2

8

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います。

于 2013-01-01T01:55:48.690 に答える
2

ポイントのプロットに関する問題の 1 つは、zoom=10関数で使用するとget_map()、ポイントがマップの外側にあり、プロットする必要があるため、zoom=5代わりに使用したことです。

    library(ggmap)
    map <- get_map(location = 'Switzerland', zoom = 5, 
        maptype = "terrain",  source = "google") 

map のプロットには function を使用しggmap()ました。ポイントを追加するためgeom_point()に使用することができます。この目的のために、サンプル データはdfxyおよびのデータ フレームとして保存されました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)

ここに画像の説明を入力

于 2012-12-31T08:04:51.860 に答える