格式化ggplot2映射 [英] Format the ggplot2 map

查看:130
本文介绍了格式化ggplot2映射的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图在R中使用ggplot2制作世界地图。我想要显示来自巴西国家的人均国内生产总值。有2个问题:


  1. 在国家中心有两个标签不容易读取信息。他们重叠。减少数字未解决。


  2. 我想更改颜色符号并不知道如何访问它。我想用颜色来轻松地注意到GDP的差异。

  3. 我的数据是:
    https://docs.google.com/file/d/0B_coFit6AovfcEFkbHBjZEJaQ1E/edit

    这是我的代码:
    gpclibPermit()
    库(ggplot2)
    库(rgdal)
    库(rgeos)
    库(ggmap)


    #读取管理界限(适当地更改文件夹)
    brMap< - readShapePoly(BRASIL.shp)
    brMap

    #读取下载的数据(适当更改文件夹)
    brRen< - read.csv(Renda.csv,sep =;,quote =\,dec =。,stringsAsFactors = FALSE)
    brRen $ rendapc< - as.numeric(as.character(brRen $ rendapc))#format as numeric

    #convert shp to UTF8
    library(descr)
    brMap $ ESTADO< -toUTF8(brMap $ ESTADO,IBM850)

    #转换shp数据到数据框为ggplot
    as.data.frame(brMap)#para definir一个区域
    brMap = gBuffer(brMap,width = 0,byid = TRUE)#Polygons的正确问题 - TopologyException
    brMapDf< - fortify(brMap,region =UF)
    brMapDf


    #合并地图和数据
    brRenMapDf< - merge(brMapDf,brRen ,by.x =id,by.y =Iden)
    brRenMapDf< - brRenMapDf [order(brRenMapDf $ order),]

    # b $ b brazil.limits< - geocode(c(MonteCaburaí,Barra doChuí,Serra do Divisor,Ilhas Martin Vaz))
    brRenMapDf < - subset(brRenMapDf,long > min(brazil.limits $ lon)&长时间< max(brazil.limits $ lon)& lat> min(brazil.limits $ lat)& lat < max(brazil.limits $ lat))

    #ggplot mapping
    #data layer
    m0 < - ggplot(data = brRenMapDf)
    #空映射(仅限(x = long,y = lat,group = group),color ='gray')+ coord_equal()
    m1

    #填写教育支出数据
    m2< - m1 + geom_polygon(aes(x = long,y = lat,group = group,fill = rendapc))
    m2


    #逆序(具有可见边界)
    m0 < - ggplot(data = brRenMapDf)
    m1 < - m0 + geom_polygon(aes(x = long,y = lat ,group = group,fill = rendapc))+ coord_equal()
    m2 <-m1 + geom_path(aes(x = long,y = lat,group = group),color ='black')
    m2


    #通过GoogleMap(如果投影不正确,则不工作)
    map< - get_map(location ='Brazil',zoom = 4)
    m0 < - ggmap(map)
    m1 < - m0 + geom_polygon(aes(x = long,y = lat,group = group,fill = rendapc),data = brRenMapDf,alpha = .9)
    m2< - m1 + geom_path(aes(x = long,y = lat,group = group),data = brRenMa pDf,color ='black')
    m2


    #添加文本
    库(doBy)
    txtVal< - summaryBy(long + lat + data = brRenMapDf,FUN = mean,keep.names = T)
    m3 <-m2 + geom_text(aes(x = long,y = lat,label = rendapc),data = txtVal,col =黄,hjust = 0.5,vjust = 0.5,cex = 3)
    m3

    我想要改进的结果:



    解决方案

    关于更改颜色比例,ggplot2拥有统一的尺度处理方式。你正在寻找的函数总是格式为 scale_ {which_scale} _ {scale_type} ,其中 which_scale 是一种审美(您在 aes()中使用的内容,例如 fill size )和 scale_type 可以是连续的或离散的等等。如果你想调整 fill scale为 scale_fill_continuous scale_fill_gradient scale_fill_gradient2 。看看这些函数的文档。



    代码示例:

      m2 < -  m1 + geom_polygon(aes(x = long,y = lat,group = group,fill = rendapc))
    m2 + scale_fill_gradient(low =blue,high =red)


    I´m trying to produce a worldmap using ggplot2 in R. I want to show GDP per capita from Brazilian States. There are 2 problems:

    1. In the center of Country have two labels aren't easy to read the information. They are overlapping.Reducing the numbers not resolved.

    2. I would like to change the colour breaks and don't know how to access it. I would like to use colors to become easy to note the diferences of GDP.

    My data is: https://docs.google.com/file/d/0B_coFit6AovfcEFkbHBjZEJaQ1E/edit

    Here is my code:

    library(maptools)
    gpclibPermit()
    library(ggplot2)
    library(rgdal)
    library(rgeos)
    library(ggmap)
    
    
    # read administrative boundaries (change folder appropriately)
    brMap <- readShapePoly("BRASIL.shp")
    brMap
    
    # read downloaded data (change folder appropriately)
    brRen <- read.csv("Renda.csv", sep = ";", quote = "\"", dec=".", stringsAsFactors = FALSE)
    brRen$rendapc <- as.numeric(as.character(brRen$rendapc)) # format as numeric
    
    #convert shp to UTF8
    library(descr)
    brMap$ESTADO<-toUTF8(brMap$ESTADO, "IBM850")
    
    # convert shp data to data frame for ggplot
    as.data.frame(brMap) # para definir a region
    brMap = gBuffer(brMap, width=0, byid=TRUE) #correct problem with Polygons - TopologyException
    brMapDf <- fortify(brMap, region="UF")
    brMapDf
    
    
    # merge map and data
    brRenMapDf <- merge(brMapDf, brRen, by.x="id", by.y="Iden")
    brRenMapDf <- brRenMapDf[order(brRenMapDf$order),]
    
    # limit data to main Europe
    brazil.limits <- geocode(c("Monte Caburaí", "Barra do Chuí", "Serra do Divisor", "Ilhas Martin Vaz"))
    brRenMapDf <- subset(brRenMapDf, long > min(brazil.limits$lon) & long < max(brazil.limits$lon) & lat > min(brazil.limits$lat) & lat < max(brazil.limits$lat))
    
    # ggplot mapping
    # data layer
    m0 <- ggplot(data=brRenMapDf)
    # empty map (only borders)
    m1 <- m0 + geom_path(aes(x=long, y=lat, group=group), color='gray') + coord_equal()
    m1
    
    # fill with education expenditure data
    m2 <- m1 + geom_polygon(aes(x=long, y=lat, group=group, fill=rendapc))
    m2
    
    
    # inverse order (to have visible borders)
    m0 <- ggplot(data=brRenMapDf)
    m1 <- m0 + geom_polygon(aes(x=long, y=lat, group=group, fill=rendapc)) + coord_equal()
    m2 <- m1 + geom_path(aes(x=long, y=lat, group=group), color='black')
    m2
    
    
    # over a GoogleMap (not working if not correctly projected)
    map <- get_map(location = 'Brazil', zoom=4)
    m0 <- ggmap(map)
    m1 <- m0 + geom_polygon(aes(x=long, y=lat, group=group, fill=rendapc), data=brRenMapDf, alpha=.9)
    m2 <- m1 + geom_path(aes(x=long, y=lat, group=group), data=brRenMapDf, color='black')
    m2
    
    
    # add text
    library(doBy)
    txtVal <- summaryBy(long + lat + rendapc ~ id, data=brRenMapDf, FUN=mean, keep.names=T)
    m3 <- m2 + geom_text(aes(x=long, y=lat, label=rendapc), data=txtVal, col="yellow", hjust=0.5, vjust=0.5, cex=3)
    m3
    

    My result I want to improve:

    解决方案

    In regard to changing the colorscale, ggplot2 has a uniform way of handling scales. The function you are looking for always has the format scale_{which_scale}_{scale_type}, where which_scale is an aesthetic (what you use in aes(), for example fill or size), and scale_type can be continuous or discrete, etc. What you are looking for if you want to tweak the fill scale is scale_fill_continuous, scale_fill_gradient, or scale_fill_gradient2. Have a look at the documentation of those functions.

    A code example:

    m2 <- m1 + geom_polygon(aes(x=long, y=lat, group=group, fill=rendapc))
    m2 + scale_fill_gradient(low = "blue", high = "red")
    

    这篇关于格式化ggplot2映射的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆