这期内容当中小编将会给大家带来有关大数据中数据地图多图层对象的颜色标度重叠问题的解决方案,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
今天这一篇是昨天推送的基础上进行了进一步的深化,主要讲如何在离散颜色填充的地图上进行气泡图图层叠加。
为了使得案例前后一致,仍然使用昨天的数据集。
加载包:
library("ggplot2")
library("plyr")
library("maptools")
library("sp")
library("ggthemes")
导入中国省界地图:
china_map<-readShapePoly("D:/R/rstudy/CHN_adm/bou2_4p.shp")
data1<- china_map@data
data2<- data.frame(id=row.names(data1),data1)
数据格式转化及业务数据合并:
china_map1 <- fortify(china_map)
china_map_data <- join(china_map1,data2, type = "full")
mydata <- read.csv("D:/R/rstudy/Province/geshengzhibiao.csv")
china_data <- join(china_map_data, mydata, type="full")
各省省会城市经纬度数据:
province_city <- read.csv("D:/R/rstudy/Province/chinaprovincecity.csv")
###根据自己的数据量级和具体业务需要设置分割点
mydata<-mydata[,-c(5,6)]
mydata$zhibiao<-rnorm(33,100,50)
mydata$zhibiao<-abs(mydata$zhibiao)
mydata$zhibiao2<-round(mydata$zhibiao,0)
mydata$fau <- cut(mydata$zhibiao, breaks = c(0,50,100,150,200,250))
###将转换的分段因子变量重新命名为我们需要的分段阀值:
mydata$fam<-factor(mydata$fau,levels=c('(0,50]','(50,100]','(100,150]','(150,200]','(200,250]'),labels=c('0~50','50~100','100~150','150~200','200~250'),order=TRUE)
#将业务数据与地理信息数据合并:
china_data <- join(china_map_data, mydata, type="full")
windowsFonts(myFont = windowsFont("微软雅黑"))
离散标度填充:
ggplot(china_data, aes(x = long, y = lat, group = group,fill =fam)) +
geom_polygon(colour="white")+
scale_fill_brewer(palette="Blues") + ###Blues&Greens
coord_map("polyconic") +
ggtitle("某公司2015~2016年度营业状况分布图")+
guides(fill=guide_legend(reverse=TRUE,title=NULL))+
theme_map() %+replace% theme(legend.position = c(0.08,0.4),legend.text.align=1)
在离散颜色标度的基础上添加各省份散点图:
ggplot() +
geom_polygon(data=china_data, aes(x=long,y=lat,group=group,fill=fam),colour="white")+
geom_point(data=province_city,aes(x=jd,y=wd),colour="red")+
scale_fill_brewer(palette="Blues") + ###Blues&Greens
coord_map("polyconic") +
ggtitle("某公司2015~2016年度营业状况分布图")+ #写入标题
guides(fill=guide_legend(reverse=TRUE,title=NULL))+
theme_map() %+replace% theme(legend.position = c(0.08,0.4),legend.text.align=1)
更该散点图为气泡图:
province_city$PerforamA<-round(rnorm(34,100,30),0)
province_city$PerforamB<-round(rnorm(34,100,30),0)
ggplot() +
geom_polygon(data=china_data, aes(x=long,y=lat,group=group,fill=fam),colour="white")+
geom_point(data=province_city,aes(x=jd,y=wd,size=PerforamA),shape=21,fill="#8E0F2E",colour="black",alpha=0.6)+
scale_fill_brewer(palette="Blues") + ###Blues&Greens
scale_size_area(max_size=6)+
coord_map("polyconic") +
ggtitle("某公司2015~2016年度营业状况分布图")+ #写入标题
guides(fill=guide_legend(reverse=TRUE,title=NULL),size=guide_legend(reverse=TRUE,title=NULL))+
theme_map() %+replace% theme(legend.position = c(0.08,0.4),legend.text.align=1)
本来打算再继续在气泡图的基础上进行颜色渐变填充呢,可以试了一下,这样的话前面的底图离散颜色标度填充的的时候已经使用过了一个fill属性设置选项,而要对气泡图进行颜色渐变填充就要再使用一次fill属性,可是目前为止我还不知道如何在多图层中出现多个fill属性的时候如何识别并分别进行标度设置,当我运行如下代码时,软件无法识别两个颜色标度设置分别对应的指标,因而图表无法跑出来:
ggplot() +
geom_polygon(data=china_data, aes(x=long,y=lat,group=group,fill=fam),colour="white")+
scale_fill_brewer(palette="Blues") + ###Blues&Greens geom_point(data=province_city,aes(x=jd,y=wd,size=PerforamA,fill=PerforamB),shape=21,fill="#8E0F2E",colour="black",alpha=0.6)+
scale_size_area(max_size=6)+
scale_fill_gradient2(low="DarkCyan", mid="Azure", high="Sienna", midpoint=median(province_city$PerforamB))+
coord_map("polyconic") +
ggtitle("某公司2015~2016年度营业状况分布图")+ #写入标题
guides(fill=guide_legend(reverse=TRUE,title=NULL),size=guide_legend(reverse=TRUE,title=NULL))+
theme_map() %+replace% theme(legend.position = c(0.08,0.4),legend.text.align=1)
Scale for 'fill' is already present. Adding another scale for 'fill', which will replace the existing scale.
Error: Discrete value supplied to continuous scale
实在是太遗憾了,不知道哪位大神知道如何处理多图层相同的fill属性,可以告知在下,这里先行谢过了。
那么这个问题真的那么难解决吗,倘若放在半年以前,确实如此,那个时候为此纠结了很久,一直耿耿于怀,可是如今的我,水平已经今非昔比了哈哈哈(容我傲娇一下~)
其实问题是这样的,该图表对象的需要三层颜色标度映射。
最底层的离散填充标度;
气泡图的大小标度:
气泡图的填充标度;
困扰我的问题是,底层的多边形填充使用了一次fill属性,而气泡的颜色填充又使用了一次fill属性,所以两个颜色标度——
撞车了……
软件无法识别两个标度参数:
scale_fill_brewer(palette="Blues")
scale_fill_gradient2(low="DarkCyan", mid="Azure", high="Sienna")
分别是作用于那个图层的:
geom_polygon()
geom_point()
所以自己就崩溃罢工了~
当时想的方法是,是否可以给两个fill标度进行组合或者命名,最后也没搞定该如何进行区分。
前不久跟我的一个朋友聊天,聊起这个问题,也没有直接的解决方法, 可以聊天过程中突然发现了一条线索,R语言环境中的形状一共有25种,其中1~20种仅有colour属性而没有fill属性,21~25种既有colour属性又有fill属性,而我平时作图使用气泡图的时候,用惯了21号形状(主要是拥有两个颜色调整参数,比较利于后期属性调整)。
所以针对这个案例,使用21号形状的fill属性进行气泡内颜色标度映射,必然与多边形的fill映射冲撞,那么现在问题就好办了,放弃使用21号形状,选择一个只有colour属性映射的形状编号进行映射。
其中16、19号都符合要求,我随表挑选一个16号吧……
ggplot() +
geom_polygon(data=china_data, aes(x=long,y=lat,group=group,fill=fam),colour="white")+
scale_fill_brewer(palette="Greens") + ###Blues&Greens
geom_point(data=province_city,aes(x=jd,y=wd,size=PerforamA,colour=PerforamB),shape=16)+
scale_size_area(max_size=6)+
scale_colour_gradient(low="white",high="#D73434")+
coord_map("polyconic") +
ggtitle("某公司2015~2016年度营业状况分布图")+ #写入标题
guides(fill=guide_legend(reverse=TRUE,title=NULL),size=guide_legend(reverse=TRUE,title=NULL))+
theme_map() %+replace% theme(legend.position = c(0.08,0.4),legend.text.align=1)
OK,完美的解决了标度重叠问题,现在该地图已经用了三个可用的颜色标度了!
上述就是小编为大家分享的大数据中数据地图多图层对象的颜色标度重叠问题的解决方案了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。