资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

R语言怎么实现地图上的迷你条形图

本篇内容介绍了“R语言怎么实现地图上的迷你条形图”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

站在用户的角度思考问题,与客户深入沟通,找到环江网站设计与环江网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:做网站、成都网站建设、企业官网、英文网站、手机端网站、网站推广、域名申请、网络空间、企业邮箱。业务覆盖环江地区。

加载包:

library(maptools)

library(ggplot2)

library(plyr)

library(ggmap)

导入地图素材及省会城市经纬度数据

china_shp <-readShapePoly("c:/rstudy/bou2_4p.shp")    

china_map <- fortify(china_shp)     

province_city <- read.csv("c:/rstudy/chinaprovincecity.csv") #城市经纬度数据 

#新建三个指标,2015年和2016年的某经济度量指标(虚构)N15、N16和环比增长率Ratio。

province_city1<-mutate(province_city,N15=runif(34,min=500,max=1000),N16=runif(34,600,1100),Ratio=round((N16-N15)/N15,3))

province_data<-province_city1[sample(nrow(province_city1),10),]

合并后的数据结构如下,随即选取了10个城市的14、15年度某项经济指标(虚构)以及同比增长率。

R语言怎么实现地图上的迷你条形图

ggplot的现有图层图形中是没有直接根据点坐标生成条形图、柱形图的,所以这里我们只能曲线救国,使用线条图和误差线来进行模拟。

首先来画底图:

ggplot()+

geom_polygon(aes(x=long, y=lat, group=group), data=china_map, fill="white", colour="grey60")

R语言怎么实现地图上的迷你条形图

接下来使用geom_linerange函数(也就是条线图函数)进行各个坐标点的模拟柱形绘制。

线画出14年的指标值:

ggplot()+

geom_polygon(aes(x=long, y=lat,group=group),data=china_map, fill="white", colour="grey60")+

geom_linerange(data=province_data,aes(x=jd-0.5,ymin=wd,ymax=wd+N15/max(N15,N16)*5),size=5,color="orange",alpha=0.8)

R语言怎么实现地图上的迷你条形图

再叠加一次16年的指标值

ggplot()+

geom_polygon(aes(x=long, y=lat,group=group),data=china_map, fill="white", colour="grey60")+

geom_linerange(data=province_data,aes(x=jd-0.5,ymin=wd,ymax=wd+0.7*N15/max(N15,N16)*5),size=3,color="#5B88A0",alpha=0.8)+

geom_linerange(data=province_data,aes(x=jd+0.5,ymin=wd,ymax=wd+0.7*N16/max(N15,N16)*5),size=3,color="#FB882C",alpha=0.8)

R语言怎么实现地图上的迷你条形图

接下来我们来对已经塑造好的双柱条形图进行美化操作,

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

ggplot()+

geom_polygon(aes(x=long, y=lat,group=group),data=china_map, fill="white", colour="grey60")+

geom_linerange(data=province_data,aes(x=jd-0.5,ymin=wd,ymax=wd+0.7*N15/max(N15,N16)*5),size=3,color="#5B88A0",alpha=0.8)+

geom_linerange(data=province_data,aes(x=jd+0.5,ymin=wd,ymax=wd+0.7*N16/max(N15,N16)*5),size=3,color="#FB882C",alpha=0.8)+

geom_text(aes(x=jd,y=wd-0.6,label=paste0(province_data$province,ifelse(Ratio>0,"▲","▼"),Ratio*100,"%")), data=province_data,family="myFont",size=2.5)+

theme_nothing()+

annotate("text", x=105, y=52, label="● 2015", color= "#5B88A0", size=8)+ 

annotate("text", x=105, y=49, label="● 2016", color= "#FB882C", size=8)

R语言怎么实现地图上的迷你条形图

其实最初在网上看到该图(大概是刘万祥老师的博客,在此感谢老师的启发),他的做法是使用geom_errbar图层函数,也就是误差线图层函数,其实理念是一致的。这里给出原方法。

ggplot()+

geom_polygon(aes(x=long, y=lat,group=group),data=china_map, fill="white", colour="grey60")+

geom_errorbar(data=province_data,aes(x=jd-0.5,ymin=wd,ymax=wd+0.7*N15/max(N15,N16)*5),size=3,color="#5B88A0",width=0,alpha=0.8)+

geom_errorbar(data=province_data,aes(x=jd+0.5,ymin=wd,ymax=wd+0.7*N16/max(N15,N16)*5),size=3,color="#FB882C",width=0,alpha=0.8)+

geom_text(aes(x=jd,y=wd-0.6,label=paste0(province_data$province,ifelse(Ratio>0,"▲","▼"),Ratio*100,"%")), data=province_data,family="myFont",size=2.5)+

theme_nothing()+

annotate("text", x=105, y=52, label="● 2014", color= "#5B88A0", size=8)+ 

annotate("text", x=105, y=49, label="● 2015", color= "#FB882C", size=8)

R语言怎么实现地图上的迷你条形图

其实如果能换个思路,使用geom_errorh函数,想必一定了以做出横向的条形图。

ggplot()+

geom_polygon(aes(x=long, y=lat,group=group),data=china_map, fill="white", colour="grey60")+

geom_errorbarh(data=province_data,aes(x=jd,y=wd,xmin=jd-3,xmax=jd+3*N15/max(N15,N16)),size=3,color="#5B88A0",height=0,alpha=0.8)+

geom_errorbarh(data=province_data,aes(x=jd,y=wd-0.8,xmin=jd-3,xmax=jd+3*N16/max(N15,N16)),size=3,color="#FB882C",height=0,alpha=0.8)+

geom_text(aes(x=jd+0.2,y=wd+1,label=paste0(province_data$province,ifelse(Ratio>0,"▲","▼"),Ratio*100,"%")), data=province_data,family="myFont",size=2.5)+

theme_nothing()+

annotate("text", x=105, y=52, label="● 2015", color= "#5B88A0", size=7)+ 

annotate("text", x=105, y=50, label="● 2016", color= "#FB882C", size=7)

R语言怎么实现地图上的迷你条形图

“R语言怎么实现地图上的迷你条形图”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!


新闻名称:R语言怎么实现地图上的迷你条形图
网页路径:http://cdkjz.cn/article/gooeee.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220