【问题标题】:Combining balloon plot with shapefile map in ggplot在ggplot中将气球图与shapefile图相结合
【发布时间】:2016-01-02 18:55:23
【问题描述】:

我正在尝试将气球图与从 www.gadm.org 中的基本中国 shapefile 创建的基本地图相结合。我的目标是创建一个气球图,其中包含来自单独数据帧的数据作为 shapefile 地图顶部的一层,使用经度和纬度来确定气球的位置。

library(ggplot2)
library(maps)
library(maptools)

China_basic <- readShapePoly("CHN_adm0.shp")
china_basemap <-fortify(China_shp)

chinachart <- ggplot(china_basemap,aes(x=long,y=lat,group=group)) + 
  geom_polygon(colour="white") 

到目前为止一切都很好,但是,现在我想将来自单独数据框的其他数据添加到绘图中:

cit <- c('Beijing','Shanghai','Guangzhou')
lng <-  c(116.23,121.3,113.16)
lt <- c(39.55,31.12,23.08)
pop <- c(18590000,24256800,11264800)
dat <- c(400,560,700)

newdata <- data.frame(cit,lng,lt,pop,dat)

chinachart + geom_point(x=newdata$lng,y=newdata$lt,size=newdata$pop,fill=newdata$dat,
shape=21,colour='black')+
  scale_colour_gradient2(low="white",mid="yellow",high="red",midpoint=560)

这给了我以下错误,我不确定我的语法做错了什么:

Error: Incompatible lengths for set aesthetics: shape, colour, size, fill, x, y

非常感谢任何帮助。

【问题讨论】:

    标签: r ggplot2 shapefile


    【解决方案1】:

    一个问题是使用scale_colour_gradient2scale_fill_gradient2(您映射了fill 美学,而不是color)。

    另一个是你如何构建geom_point 层。

    这是正确的版本,但映射习语略有不同:

    library(sp)
    library(raster)
    library(rgeos)
    library(ggplot2)
    library(ggthemes)
    
    china_basic <- getData("GADM", country="CHN", level=0)
    china_basic <- SpatialPolygonsDataFrame(gSimplify(china_basic, 0.05), china_basic@data)
    china_basemap <- fortify(china_basic)
    
    gg <- ggplot()
    gg <- gg + geom_map(data=china_basemap, map=china_basemap,
                        aes(x=long, y=lat, map_id=id),
                        color="white")
    gg <- gg + coord_map("azequalarea")
    gg <- gg + theme_map()
    china_chart <- gg
    
    cit <- c('Beijing',  'Shanghai', 'Guangzhou')
    lng <- c(116.23, 121.3, 113.16)
    lat <- c(39.55, 31.12, 23.08)
    pop <- c(18590000, 24256800, 11264800)
    dat <- c(400, 560, 700)
    
    new_data <- data.frame(cit, lng, lat, pop, dat, stringsAsFactors=FALSE)
    
    china_chart <- china_chart +
      geom_point(data=new_data, 
                 aes(x=lng, y=lat, size=pop, fill=dat),
                 shape=21, colour='black')
    china_chart <- china_chart + 
      scale_fill_gradient2(low="white", mid="yellow", high="red", midpoint=560)
    china_chart <- china_chart + theme(legend.position="bottom")
    china_chart
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-29
      • 1970-01-01
      • 2021-11-30
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多