3

ggplot でポイントを追加したコロプレス マップを作成しています。したがって、geom_map ヘルプ ドキュメントの最後の例に従ってください。

私はこれを思いついた:

require(ggplot2)
require(maps)

set.seed(47)
county_map <- map_data("county", "washington")
names(county_map)[5:6] <- c("state", "id")
countyData <- data.frame(id = unique(county_map$id), value = rnorm(39)) 
map1 <- ggplot(countyData, aes(map_id = id)) +
    geom_map(aes(fill = value), map = county_map, colour = "black") +
    coord_map() +
    expand_limits(x = county_map$long, y = county_map$lat)

print(map1)

これは、コロプレス マップに最適です。(それはさておき、私はこのmap_data機能にわくわくしています。)しかし、私はポイントを追加しようとします

pointData <- structure(list(xx = c(-119.872483243387, -122.809038239929, 
-122.143143065312
), yy = c(48.1320425447619, 46.7352071436801, 47.9911548514037
)), .Names = c("xx", "yy"), row.names = c(1746L, 7281L, 2692L
), class = "data.frame")

map1 + geom_point(mapping = aes(xx, yy), data = pointData)

そして、私はそれを機能させることができません。groupに設定したり、引数に名前をNULL付けたりするなど、多くのバリエーションを試しましたが、うまくいきませんでした。aesしたがって、マップデータをコロプレスデータとマージして を使用することで、問題なくまったく同じことを行うこの質問geom_polygonを見つけました。これはとにかくより簡単に思えます。(最初に ID マッピングを解決するのに少し時間がかかりました。これは、regionを正常に使用するために列名を削除する必要があることに気付いていなかったからidです。また、最初のメソッドの構文は、私にはまだ奇妙に思えます。)

だから、2つの質問:

  1. 上記の方法を使用して、別のデータ フレームからポイントを追加するにはどうすればよいgeom_mapですか?
  2. さらに重要なことは、アプローチgeom_mapとは対照的に使用する利点はありますか?geom_polygon
4

2 に答える 2

3

これは私のために働く:

map1 <- ggplot(countyData) +
  geom_map( map = county_map, aes(map_id = id,fill = value), 
            colour = "black") + coord_map() +
  expand_limits(x = county_map$long, y = county_map$lat)
  map1 + geom_point(mapping = aes(xx, yy), data = pointData)

私にとってgeom_mapは a のラッパーですgeom_polygon。これは、すべての地理的設定 (ID でグループ化された緯度と経度) を含むレイヤーです。

geom_mapマップをプロットするときやgeom_polygon、任意のポリゴン タイプをプロットするときに使用します。

EDIT マップを追加するには

ここに画像の説明を入力

于 2013-02-05T02:04:45.447 に答える
2

あなたの当面の問題は、ggplotあなたのポイントデータを地図に結びつける方法がないということです。データフレームを見ると、マップに次のように表示されます。

str(countyData)
'data.frame':   39 obs. of  2 variables:
 $ id   : chr  "adams" "asotin" "benton" "chelan" ...
 $ value: num  1.995 0.711 0.185 -0.282 0.109 ...

...そしてあなたのポイントのためにこれ:

str(pointData)
'data.frame':   3 obs. of  2 variables:
 $ xx: num  -120 -123 -122
 $ yy: num  48.1 46.7 48

ggplotポイントを見つけることができる一般的な変数がありますか?

それでも、問題は簡単に解決されます。私は通常ではgeom_polygonなく使用しますgeom_mapが、それは主に習慣から外れています。これは、たとえば次のように機能します。

colnames(pointData) <- c('long','lat') # makes consistent with county_map
pointData$group <- 1 # ggplot needs a group to work with
county_map$value <- sapply(1:nrow(county_map),
                           function(x) round(runif(1, 1, 8), 0)) # for colours

ggplot(county_map, aes(x = long, y = lat, group = group)) +
    geom_polygon(aes(fill = value)) +
    coord_map() +
    geom_point(data = pointData, aes(x = long, y = lat), shape = 21, fill = "red")

これは次のようになります(ポイントに注意してください)。 スクリーンショット

ただ、使うべきか、使うべきかということgeom_mapについてgeom_polygonは、あまり考えていません。多分誰か他の人が見解を持っています。

于 2013-02-05T02:27:58.973 に答える