专栏首页数据小魔方R语言可视化——数据地图离散百分比填充(环渤海)

R语言可视化——数据地图离散百分比填充(环渤海)

今天跟大家分享如何以百分比形式填充离散分段数据地图。

案例用环渤海三省二市的地理数据。

library(ggplot2)

library(maptools)

library(plyr)

数据导入、转换、抽取

CHN_adm2 <- readShapePoly("c:/rstudy/CHN_adm/CHN_adm2.shp")

CHN_adm2_1 <- fortify(CHN_adm2)

data1 <- CHN_adm2@data

data2 <- data.frame(id=row.names(data1),data1)

china_map_data <- join(CHN_adm2_1, data2, type = "full")

huanbohai <-subset(china_map_data,NAME_1==c("Beijing","Tianjin","Nei Mongol","Hebei","Shandong"))

建立业务数据:

huanbohai_perm<-data.frame(NAME_2=unique(huanbohai$NAME_2),zhibiao=rnorm(42,100,50))

huanbohai_perm$zhibiao<-round(huanbohai_perm$zhibiao,0)

write.table (huanbohai_perm, file ="C:/rstudy/huanbohai.csv", sep =",", row.names =FALSE)

业务数据导入及合并:

mydata<-read.csv("C:/rstudy/huanbohai.csv",header=T)

huanbohai_map_data <- join(huanbohai,mydata, type="full")

###将转换的分段因子变量重新命名为我们需要的分段阀值:

huanbohai_map_data$fau <- cut(huanbohai_map_data$zhibiao, breaks = c(0,40,80,120,160,200))

huanbohai_map_data$fam<-factor(huanbohai_map_data$fau,levels=c('(0,40]','(40,80]','(80,120]','(120,160]','(160,200]'),labels=c('0~40','40~80','80~120','120~160','160~200'),order=TRUE)

离散颜色标度填充(实际值分段)

windowsFonts(myFont = windowsFont("微软雅黑"))

ggplot(huanbohai_map_data, aes(x = long, y = lat, group = group,fill =fam)) +

geom_polygon(colour="white")+

scale_fill_brewer(palette="Greens") + ###Blues&Greens

coord_map("polyconic") +

ggtitle("某公司2015~2016年度营业状况分布图")+

guides(fill=guide_legend(reverse=TRUE,title=NULL))+

theme(

title=element_text(family="myFont"),

legend.text.align=1, ###图例标签右对齐

panel.grid = element_blank(),

panel.background = element_blank(),

axis.text = element_blank(),

axis.ticks = element_blank(),

axis.title = element_blank(),

legend.position = c(0.08,0.6)

)

以上是昨天在东三省填充地图中所使用过的方法,接下来我解释一种新的填充方案,通过将数量段转换为百分比进行离散颜色标度填充:

离散颜色标度分割(百分比数量段):

qa <- quantile(na.omit(huanbohai_map_data$zhibiao), c(0,0.2,0.4,0.6,0.8,1.0))

huanbohai_map_data$zhibiao_q<-cut(huanbohai_map_data$zhibiao,qa,labels = c("0-20%", "20-40%","40-60%","60-80%", "80-100%"),include.lowest = TRUE)

> levels(huanbohai_map_data$zhibiao_q)

[1] "0-20%" "20-40%" "40-60%" "60-80%" "80-100%"

通过将指标变量以分段百分比的方式进行分割,新建立一个百分比分段因子变量:

离散渐变(百分比)

windowsFonts(myFont = windowsFont("微软雅黑"))

ggplot(huanbohai_map_data,aes(long,lat))+

geom_polygon(aes(group=group,fill=zhibiao_q),colour="white")+

scale_fill_brewer(palette="Greens")+

coord_map("polyconic") +

guides(fill=guide_legend(reverse=TRUE,title=NULL))+

ggtitle("某公司2015~2016年度营业状况分布图")+

theme(

title=element_text(family="myFont"),

panel.grid = element_blank(),

panel.background = element_blank(),

axis.text = element_blank(),

axis.ticks = element_blank(),

axis.title = element_blank(),

legend.position =c(0.2,0.7),

legend.text.align=1

)

###带标签

接下来处理标签问题:

创建各城市中心地理坐标:

midpos <- function(data1) mean(range(data1,na.rm=TRUE))

centres <- ddply(huanbohai_map_data,.(city),colwise(midpos,.(long,lat)))

填充并添加标签:

ggplot(huanbohai_map_data,aes(long,lat))+

geom_polygon(aes(group=group,fill=zhibiao_q),colour="white")+

scale_fill_brewer(palette="Greens")+

coord_map("polyconic") +

geom_text(aes(label=city),size =3,family="myFont",fontface="plain",data=centres) +

guides(fill=guide_legend(reverse=TRUE,title=NULL))+

ggtitle("某公司2015~2016年度营业状况分布图")+

theme(

title=element_text(family="myFont"),

title=element_text(family="myFont"),

panel.grid = element_blank(),

panel.background = element_blank(),

legend.text.align=1,

axis.text = element_blank(),

axis.ticks = element_blank(),

axis.title = element_blank(),

legend.position = c(0.2,0.7)

)

本文分享自微信公众号 - 数据小魔方(datamofang),作者:小魔方

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-10-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • R语言可视化——数据地图应用(东三省)

    今天是一个案例应用,采用东北三省地图进行离散颜色映射,让大家感受下R语言在地理信息空间可视化方面的强大功能,同时也会对之前强调过的地图配色技巧进行应用。 加载工...

    数据小磨坊
  • R语言可视化——多边形与数据地图填充

    ggplot函数中有一类特殊的图表类型叫做多边形,很难用传统的视角来定义它属于哪一类图表,因为它能够呈现信息多种多样。 特别是在做某些比较高阶的图表——地图时,...

    数据小磨坊
  • R语言数据地图——全球填色地图

    今天这篇是昨天美国地图的续篇,同样的方法技巧,不同的对象。 整个过程以及代码并没有太大差别,只要拿到世界地图素材,根据之前的代码,自己修改参数和指标名称以及引用...

    数据小磨坊
  • R 热图绘制heatmap①

    用户1359560
  • 分享一个绕过移动端系统限制的增强版dlfunctions库

    支持App中加载和使用Android系统库接口(即使maps中还没有被加载也支持)。

    ruki
  • Caffe2 - (十六) 创建 LMDB 数据库

    AIHGF
  • [博客小程序]评论通知功能实现(二)——实战过程中的坑

    当用户在小程序内发生过提交表单行为且该表单声明为要发模板消息的,开发者需要向用户提供服务时,可允许开发者向用户在7天内推送有限条数的模板消息(1次提交表单可下发...

    Bug生活2048
  • python+shell 备份 csdn 博客文章

    这里,我们将文章的 ID 和日期,组成一个元组,用逗号分隔。然后我们可以手工加上一个方括号,组成一个由元组构成的数组,方便我们后面使用。

    FungLeo
  • 如何优雅的对Webview进行截屏?

    通过调用webview.capturePicture(),得到一个picture对象,根据图像的宽和高创建一个Bitmap,再创建一个canvas,绑定bitm...

    吴延宝
  • 520 | 机器人竟然对我表白了?!用Python假装自己有女朋友(附代码)

    大数据文摘

扫码关注云+社区

领取腾讯云代金券