2012-11-16 45 views
6

私はマップ上の場所によって完全な人口を示し、その人口のサブセットを表示する情報をプロットしようとしています。私は、これを伝えるために同心円または3-d逆円錐を使用するデータ視覚化を見てきました。ここでは大まかな作品だ enter image description hereR ggplot2/ggmap同心円をポイントとして

を:私はちょうどここで私が何を探しているかの目安を示しPaintでフリーハンドのバージョンがありますggplot/ggmap

でそれを行う方法を見つけ出すことはできませんのデータの例:

> dput(df1) 
structure(list(zip = c("00210", "00653", "00952", "02571", "04211", 
"05286", "06478", "07839", "10090", "11559"), city = c("Portsmouth", 
"Guanica", "Sabana Seca", "Wareham", "Auburn", "Craftsbury", 
"Oxford", "Greendell", "New York", "Lawrence"), state = c("NH", 
"PR", "PR", "MA", "ME", "VT", "CT", "NJ", "NY", "NY"), latitude = c(43.005895, 
17.992112, 18.429218, 41.751554, 44.197009, 44.627698, 41.428163, 
41.12831, 40.780751, 40.61579), longitude = c(-71.013202, -66.90097, 
-66.18014, -70.71059, -70.239485, -72.434398, -73.12729, -74.678956, 
-73.977182, -73.73126), timezone = c(-5L, -4L, -4L, -5L, -5L, 
-5L, -5L, -5L, -5L, -5L), dst = c(TRUE, FALSE, FALSE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE), totalPop = c(43177, 37224, 37168, 
15492, 1614, 88802, 2587, 80043, 78580, 87461), subPop = c(42705, 
36926, 27556, 10827, 774, 39060, 1542, 21304, 53438, 2896)), .Names = c("zip", 
"city", "state", "latitude", "longitude", "timezone", "dst", 
"totalPop", "subPop"), row.names = c(1L, 50L, 200L, 900L, 1500L, 
2000L, 2500L, 3000L, 3500L, 4000L), class = "data.frame") 

何か提案がありますか?

答えて

10

基本的な考え方は、その層が上にあるので、小さい方が、大きい方の後にプロットされていることを確認すること、2つの集団のための別々のgeomを使用することですから

library(ggplot2) # using version 0.9.2.1 
library(maps) 

# load us map data 
all_states <- map_data("state") 

# start a ggplot. it won't plot til we type p 
p <- ggplot() 

# add U.S. states outlines to ggplot 
p <- p + geom_polygon(data=all_states, aes(x=long, y=lat, group = group), 
    colour="grey", fill="white") 

# add total Population 
p <- p + geom_point(data=df1, aes(x=longitude, y=latitude, size = totalPop), 
    colour="#b5e521") 

# add sub Population as separate layer with smaller points at same long,lat 
p <- p + geom_point(data=df1, aes(x=longitude, y=latitude, size = subPop), 
    colour="#00a3e8") 

# change name of legend to generic word "Population" 
p <- p + guides(size=guide_legend(title="Population")) 

# display plot 
p 

enter image description here

あなたのデータには米国以外の場所が含まれていることが明らかです。この場合、異なる基礎となる地図データが必要な場合があります。あなたは合計とサブ人口geom_point()レイヤーを追加して、以前のようにそれを表示

require(ggmap) 
require(mapproj) 
map <- get_map(location = 'united states', zoom = 3, maptype = "terrain", 
     source = "google") 
p <- ggmap(map) 

た後:ggmapパッケージからget_map()はカップルのオプションが用意されています。

+0

これは素晴らしいことです。どうもありがとうございました。 – screechOwl

+0

このリンクは、同様のアプローチを使用して、ヒートマップを州ごとに作成します。http://www.dataincolour.com/2011/07/maps-with-ggplot2/ – chandler

関連する問題