【问题标题】:R ggplot2/ggmap concentric circles as pointsR ggplot2/ggmap 同心圆作为点
【发布时间】:2012-11-05 10:06:18
【问题描述】:

我正在尝试绘制一些信息来显示全部人口,然后按地图上的位置显示该人口的一个子集。我已经看到使用同心圆或 3-d 倒锥形来传达这一点的数据可视化。我只是不知道如何在ggplot / ggmap 中做到这一点

这是Paint 中的一个免费版本,它显示了我想要做什么的粗略想法:

这是一个粗略的数据示例:

> 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")

有什么建议吗?

【问题讨论】:

    标签: r geolocation ggplot2 geocoding ggmap


    【解决方案1】:

    基本思想是为两个种群使用不同的几何图形,确保较小的图形在较大的图形之后绘制,因此其图层位于顶部:

    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 
    

    从地图上可以清楚地看出,您的数据包含非连续的美国位置,在这种情况下,您可能需要不同的基础地图数据。 get_map() 来自 ggmap 包提供了几个选项:

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

    之后添加总人口和子人口 geom_point() 图层并像以前一样显示它。

    【讨论】:

    猜你喜欢
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2015-06-29
    相关资源
    最近更新 更多