山东省公共财政预算数据可视化

自带学习R语言以来,从来没用把这些技能用在自己的专业方向上,说好的学以致用呢~

最近看到的一篇微信公众号推文,内容是关于山东省各县(细化到137个县级行政区)2016年的GDP规模、公共预算收入规模及其增速指标,数据质量还不错,是山东省发改委公布的。

http://mp.weixin.qq.com/s/Sk4fIh3-ykcNK8uP0gZryw

感觉自己终于离专业方向近了一些(本人学财政的),数据就在眼前,这次机会一定要抓住了。

数据虽然质量不错,但是苦于手头没有最新的山东省县级地图素材(之前练习用的SHP素材都是很古老的素材,使用市级范围没啥问题,但是县级行政单位变更太快了,根本没法用)。所以这篇文章写作过程特别艰难~

我用了半个上午爬取并整理数据,却用了两天时间寻找地图素材、最终找到了山东省17个地级市的json素材(还不会合并json数据),找到了个在线json转shp的平台,用17个json文件拼接成一个 完整的山东省地图,然后导出shp数据,这才搞定了县级地图工作。(想想也是太执着了~)

本篇文章主要主要还是演示地图可视化为主,其中包含基础的数据抓取、数据清洗、数据聚合、变量结构和ggplot图层语法,最终得到7福高质量的数据地图。

加载包

以下是本文需要用到的包:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
library(XML)
library(RCurl)
library(stringr)
library(dplyr)
library(plyr)
library(ggplot2)
library(maptools)
library(Cairo)
library(RColorBrewer)
library(xlsx)
library(rjson)
library(rgdal)
library(data.table)
library(tidyr)
library(grid)
library(showtext)
library(sqldf)

数据抓取

数据抓取过程

1
2
3
4
5
6
7
8
9
10
11
url<-"http://mp.weixin.qq.com/s/Sk4fIh3-ykcNK8uP0gZryw"
Name<- getURL(url,.encoding="utf-8")%>%htmlParse(encoding="UTF-8")%>%getNodeSet("//strong/span")
title<-grep("按",laply(Name,xmlValue,trim=T),value=T);title
tbls<-readHTMLTable(url,header=TRUE,trim=TRUE)
names(tbls)<-title;names(tbls)
sapply(tbls,nrow)
[1] "按公共财政预算收入规模:" "按公共财政预算收入增长幅度:"
[3] "按GDP规模:" "按GDP增长幅度:"
[5] "按人均GDP:"

以下数据网页中五张表格的提取过程:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
BudgetScale<-tbls$`按公共财政预算收入规模:`[-1];names(BudgetScale)<-c("Country","BudgetScale")
BudgetScale$Country<-as.character(BudgetScale$Country)
BudgetScale$BudgetScale<-as.numeric(as.character(BudgetScale$BudgetScale))
BudgetGrowth<-tbls$`按公共财政预算收入增长幅度:`[-1];names(BudgetGrowth)<-c("Country","BudgetGrowth")
BudgetGrowth$Country<-as.character(BudgetGrowth$Country)
BudgetGrowth$BudgetGrowth<-as.numeric(as.character(BudgetGrowth$BudgetGrowth))
GDPScale<-tbls$`按GDP规模:`[-1];names(GDPScale)<-c("Country","GDPScale")
GDPScale$Country<-as.character(GDPScale$Country)
GDPScale$GDPScale<-as.numeric(as.character(GDPScale$GDPScale))
GDPGrowth<-tbls$`按GDP增长幅度:`[-1];names(GDPGrowth)<-c("Country","GDPGrowth")
GDPGrowth$Country<-as.character(GDPGrowth$Country)
GDPGrowth$GDPGrowth<-as.numeric(as.character(GDPGrowth$GDPGrowth))
PerGDPGrowth<-tbls$`按人均GDP:`[-1];names(PerGDPGrowth)<-c("Country","PerGDPGrowth")
PerGDPGrowth$Country<-as.character(PerGDPGrowth$Country)
PerGDPGrowth$PerGDPGrowth<-as.numeric(as.character(PerGDPGrowth$PerGDPGrowth))
BudgetScale<-arrange(BudgetScale,Country)
BudgetGrowth<-arrange(BudgetGrowth,Country)
GDPScale<-arrange(GDPScale,Country)
GDPGrowth<-arrange(GDPGrowth,Country)
PerGDPGrowth<-arrange(PerGDPGrowth,Country)

本来137个县级行政区的名称应该是一致的,但是网页中公布的数据名称不一致,所以没法合并,需要自己集合最新的行政区划名称手动修改,费老大劲!

先将五张表格的数据写入一个工作薄中,然后手动修改:

1
2
3
4
5
write.xlsx(BudgetScale,"D:/R/File/shddata.xlsx",sheetName="BudgetScale",append=FALSE,row.names=FALSE)
write.xlsx(BudgetGrowth,"D:/R/File/shddata.xlsx",sheetName="BudgetGrowth",append=TRUE,row.names=FALSE)
write.xlsx(GDPScale,"D:/R/File/shddata.xlsx",sheetName="GDPScale",append=TRUE,row.names=FALSE)
write.xlsx(GDPGrowth,"D:/R/File/shddata.xlsx",sheetName="GDPGrowth",append=TRUE,row.names=FALSE)
write.xlsx(PerGDPGrowth,"D:/R/File/shddata.xlsx",sheetName="PerGDPGrowth",append=TRUE,row.names=FALSE)

因为以上五个表格所用到的行政区划名称不完全相同,需要手动各县级行政区划对应的隶属地级市名称才能进行列合并。

以下是我从网络上找到并整理的山东省17地级市,137县级(包含县级市)行政单位的代号,名称,经纬度信息。

1
2
3
4
5
6
7
8
setwd("D:/R/mapdata/Country/shandong")
shandong_city<-read.xlsx("City.xlsx",sheetName="City",header=T,encoding='UTF-8',stringsAsFactors=FALSE)
shandong_district<-read.xlsx("City.xlsx",sheetName="District",header=T,encoding='UTF-8',stringsAsFactors=FALSE)
shandong_district<-
unite(shandong_district,address,City,Name,sep="")
shandong_district<-transform(shandong_district,Adress=paste0("山东省",shandong_district$address))[,-1][,c(4,1,2,3)]
names(shandong_district)[1]<-"address"

通过以上shandong_district表中的城市、县级市名称字段合理规范以上五张表中的县级行政单位名称,总最终合并至表6——shandongdata注意五张表在同一个工作薄中。

经纬度地址解析:

解析经纬度地址:这里调用百度地图的API解析县级市的经纬度地址:
(大家最好自己去注册百度地图开发者,然后申请免费秘钥)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
baidu_lng <- c()
baidu_lat <- c()
ak<-"X8zlxPUdSe2weshrZ1WqnWxb43cfBI2N"
address<-shandong_district$address
for(location in address){
url<-paste("http://api.map.baidu.com/geocoder/v2/?ak=",ak,"&callback=renderOption&output=json&address=",location,sep="")
url_string <- URLencode(url)
json<- readLines(url_string, warn=F)
geo <- fromJSON(substr(json,regexpr("\\(",json)+1,nchar(json)-1))
lng<-geo$result$location$lng
lat<-geo$result$location$lat
baidu_lng<-c(baidu_lng,lng)
baidu_lat<-c(baidu_lat,lat)
}
result<-data.frame(address=address,longitude=baidu_lng,latitude=baidu_lat,stringsAsFactors=FALSE)

将县级市数据与经纬度数据合并:

1
2
3
4
5
6
shandong_district_data<-merge(shandong_district,result,by="address")[,-c(3,4)]
names(shandong_district_data)[3:4]<-c("lon","lat")
shandong_district_data$address<-as.character(shandong_district_data$address)
shandong_zhibiao_data<-read.xlsx("shddata.xlsx",sheetName="Shandongdata",header=T,encoding='UTF-8',stringsAsFactors=FALSE)
names(shandong_zhibiao_data)[2]<-"address"
shandong_district_data<-merge(shandong_district_data,shandong_zhibiao_data,by="address")

以上得到了山东省所有县级行政单位的点坐标信息。

导入背景地图素材数据

读图背景素材导入:

素材一:山东省县级地图素材:

1
2
3
4
5
6
mymap<-readOGR(".","map",encoding = "UTF-8",verbose=FALSE)
myShape <- fortify(mymap)
x <- mymap@data
names(x)[3]<-"Code"
xs <- data.frame(x,ID=seq(0:139)-1)[,c(3,8)]
shandong_district_map_data<-merge(myShape,xs,by.x="id",by.y="ID",type="full")[,-c(5,6)]

很遗憾,我们从以上素材中所提取的城市名称数据,可能涉及到编码的问题,中文全部成为了乱码,这样我们前期整理的山东省GDP及公共财政相关数据的中名称便无法与该地图进行匹配,好在行政区代码还在,这样我们就可以从之前找到行政区划代码和名称信息进行匹配。

将县级行政区地图与县级市进行匹配,获得信息完整的县级地图数据。

1
2
shandong_district_map_data<-merge(shandong_district_map_data,shandong_district_data[,-c(3,4)],by="Code",all.x=TRUE)
shandong_district_map_data<-shandong_district_map_data[order(shandong_district_map_data$order),]

素材2:山东省市级地图素材:

1
2
3
4
5
6
7
8
CHN_adm2 <- readOGR("D:/R/rstudy/CHN_adm/CHN_adm2.shp")
CHN_adm2_1 <- fortify(CHN_adm2)
CHN_adm2_1$id<-as.numeric(CHN_adm2_1$id)
shx <- CHN_adm2@data
shxs <- data.frame(shx,id=seq(0:344)-1)
china_map_data <- join(CHN_adm2_1,shxs,type="full")
shandong_city_map_data<-subset(china_map_data,NAME_1==c("Shandong"))[,c(1,2,7,14)]
mydata<-read.csv("D:/R/rstudy/State/huanbohai.csv",header=T)[,-3]
1
2
#匹配市级行政单位信息:
shandong_city_map_data <-join(shandong_city_map_data,mydata,by="NAME_2",type="left")

接下来整合指标信息与地图作图数据:

山东省市级地图作图数据:

因为我们之前获取的指标数据是按照县级行政区划整理的,这里需要使用聚合函数,整理成市级的。因为增长比率数据汇总聚合后意义不大,即便是平均值也不是很有意义,所以这里只用市级的公共预算支出和GDP数据。

1
2
3
4
5
6
7
8
shandongdata<-data.table(shandong_zhibiao_data)
shandongnewdata<-shandongdata[,.(SUM_BudgetScale=sum(BudgetScale),SUM_GDPScale=sum(GDPScale)),by=City]
shandong_city_map_data<-merge(shandong_city_map_data,shandongnewdata,by.x="city",by.y="City")
shandong_fill_map_data<-shandongnewdata
shandong_fill_map_data$city<-paste0(shandong_fill_map_data$City,"市")
shandong_fill_map_data<-shandong_fill_map_data[,c(1,4,2,3)]
shandong_fill_map_data<-merge(shandong_fill_map_data[,-1],shandong_city,by.x="city",by.y="City")
shandong_fill_map_data<-shandong_fill_map_data[,c(1,4,5,6,2,3)]

现在所有的数据已经整理完毕,我们一共得到了四张有用的数据集:

  • 市级地图数据——shandong_city_map_data(含城市指标)
  • 县级地图数据——shandong_district_map_data(含17个地级市指标及经纬度)
  • 市级指标数据——shandong_fill_map_data(含城市经纬度及两个指标:GDP规模和公众预算规模)
  • 县级指标数据——shandong_district_data(含137个行政县指标及经纬度和五个指标数据,GDP规模、GDP增速,人均GDP增速,预算规模、预算增速)。

因为地级市数据限制,只有两个指标(GDP规模和预算规模),所以,最多只能制作两张地图。
县级行政区数据比较齐全,这里计划的呈现的维度是GDP规模与GDP增速,GDP规模与人均GDP增速,GDP增速与人均GDP增速。预算规模和预算增速。合计一共四张图。

接下来我们进入地图制作环节:

市级地图:(这两将包含两幅地图:GDP规模、公共预算收入规模)

为了更加明显的呈现出各个地级市的GDP和预算规模,这里我准备将两个指标的连续数值型变量切割成有序分段因子变量。

首先浏览下各市GDP的极差分布:

1
2
> range(shandong_city_map_data$SUM_GDPScale)
[1] 703 9901

所以这里范围使用0~10000,均分为5组;

1
shandong_city_map_data$FA_SUM_GDPScale<-cut(shandong_city_map_data$SUM_GDPScale, breaks=c(0,1500,3000,4500,6000,10000),labels=c('0~1500','1500~3000','3000~4500','4500~6000','6000~10000'),order=TRUE)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
CairoPNG(file="GDPScale.png",width=1200,height=640)
font.add("myfont", "msyh.ttc")
showtext.begin()
ggplot()+
geom_polygon(data=shandong_city_map_data,aes(x=long,y=lat,group=group,fill=FA_SUM_GDPScale),col="white",size=.2)+
scale_fill_brewer(palette="Greens")+
coord_map("polyconic") +
labs(title="山东省各地级市2016年GDP规模分布",subtitle="单位:(亿元)",caption="数据来源:山东省发展与改革委员会")+
guides(fill=guide_legend(reverse=TRUE,title=NULL))+
geom_text(data=shandong_fill_map_data,aes(x=long,y=lat,label=city),family="myfont",fontface="plain",size=6)+
theme(
title=element_text(family="myfont",size=18),
plot.title=element_text(size=24),
plot.subtitle=element_text(family="myfont",size=18),
#plot.caption=element_text(family="myfont",size=18),
legend.text.align=1,
legend.text=element_text(hjust=-5,size=12),
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.8),
plot.caption=element_text(hjust=0)
)
showtext.end()
dev.off()

GDPScale

浏览下各市公共预算规模的极差分布:

1
2
> range(shandong_city_map_data$SUM_BudgetScale)
[1] 47.2 1003.3

使用直方图大致了解下最终的预算规模数据分布;

1
ggplot(shandong_city_map_data,aes(SUM_BudgetScale))+geom_histogram()

所以这里范围使用0~1200,不等分为5组;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
shandong_city_map_data$FA_SUM_BudgetScale<-cut(shandong_city_map_data$SUM_BudgetScale, breaks=c(0,150,300,450,600,1005),labels=c('0~150','150~300','300~450','450~600','600~ '),order=TRUE)
CairoPNG(file="BudgetScale.png",width=1200,height=640)
font.add("myfont", "msyh.ttc")
showtext.begin()
ggplot()+
geom_polygon(data=shandong_city_map_data,aes(x=long,y=lat,group=group,fill=FA_SUM_BudgetScale),col="white",size=.2)+
scale_fill_brewer(palette="OrRd")+
coord_map("polyconic") +
labs(title="山东省各地级市2016年公共预算收入规模分布",subtitle="单位:(亿元)",caption="数据来源:山东省发展与改革委员会")+
guides(fill=guide_legend(reverse=TRUE,title=NULL))+
geom_text(data=shandong_fill_map_data,aes(x=long,y=lat,label=city),family="myfont",fontface="plain",size=6)+
theme(
title=element_text(family="myfont",size=18),
plot.title=element_text(size=24),
plot.subtitle=element_text(family="myfont",size=18),
#plot.caption=element_text(family="myfont",size=18),
legend.text.align=1,
legend.text=element_text(hjust=-5,size=12),
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.8),
plot.caption=element_text(hjust=0)
)
showtext.end()
dev.off()

BudgetScale

以上是地级市数据可视化两个维度的全部代码,通过2016GDP规模以公共预算支出的规模对比可以发现,山东省地区间经济发展水平差异还是很大的,其中青岛在两个指标上都遥遥领先,也是全国为数不多的地级市发展好于省会的城市之一。

县级地图,以下过程将会输出五福图形,展示山东省县级行政区在GDP和预算规模的绝对量、增长率等各维度信息。分别包含GDP规模与增速、GDP规模与人均GDP增速、预算规模与预算增速、GDP规模与预算规模、GDP增速与预算增速对比。

为了与上面过程保持一致,这里的绝对量还是要换算成分段因子变量,这样比较适合通过分段颜色来更好的呈现山东省各县的相关数据信息。

首先还是简略查看下GDP的极差分布:

1
2
3
4
5
range(shandong_district_map_data$GDPScale)
[1] 67 2766
shandong_district__data
ggplot(shandong_district_map_data,aes(GDPScale))+geom_histogram()

可以看出来,县级地区GDP的分布比较诡异,出现了一个特别的值,其他县市都集中在1200以下。

1
2
3
sqldf("SELECT address,Max(GDPScale) AS GDPmax FROM shandong_district_data")
address GDPmax
1 山东省青岛市黄岛区 2766

果然青岛市各县GDP黄岛区占了大头儿。如果数据分布不是很规律的话,平均分组可能 导致有些组没数据,有些组特别集中的情况。

这里尝试着对各县GDP进行分组,期待能够分组合理的利用可视化呈现的分组。

1
2
3
4
5
6
7
8
shandong_district_map_data$FA_GDPScale<-cut(shandong_district_map_data$GDPScale, breaks=c(0,300,600,900,1200,3000),labels=c('0~300','300~600','600~900','900~1200','1200~3000'),order=TRUE)
summary(shandong_district_map_data$FA_GDPScale)
0~300 300~600 600~900 900~1200 1200~3000
2930 2549 1064 539 85
text<-arrange(shandong_district_data,desc(GDPScale))%>%select(Country,lon,lat,GDPScale)
text<-text[1:10,]

山东省各行政县(包含县级市)2016年GDP规模&增速分布

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
CairoPNG(file="DistrictGDPScale.png",width=1200,height=640)
font.add("myfont", "msyh.ttc")
showtext.begin()
ggplot()+
geom_polygon(data=shandong_district_map_data,aes(x=long,y=lat,group=group,fill=FA_GDPScale),col="grey60",size=.2)+
geom_point(data=shandong_district_data,aes(x=lon,y=lat,size=GDPGrowth),shape=21,fill="#FB832D",col="#ED7D31",alpha=.6)+ #ED7D31E02939
scale_size(range=c(1,8),guide=FALSE)+
scale_fill_brewer(palette="Greens")+
coord_map("polyconic") +
labs(title="山东省各行政县(包含县级市)2016年GDP规模&增速分布",subtitle="单位:(亿元)",caption="数据来源:山东省发展与改革委员会")+
guides(fill=guide_legend(reverse=TRUE,title=NULL))+
geom_text(data=text,aes(x=lon,y=lat-.1,label=Country),family="myfont",fontface="plain",size=4)+
theme(
title=element_text(family="myfont",size=18),
plot.title=element_text(size=24),
plot.subtitle=element_text(family="myfont",size=18),
#plot.caption=element_text(family="myfont",size=18),
legend.text.align=1,
legend.text=element_text(hjust=-5,size=12),
panel.grid = element_blank(),
panel.background = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank(),
axis.title = element_blank(),
legend.position = c(0.02,0.8),
plot.caption=element_text(hjust=0)
)
showtext.end()
dev.off()

DistrictGDPScale

山东省各行政县(包含县级市)2016年GDP规模&人均GDP增速分布

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
CairoPNG(file="DistrictPerGDPScale.png",width=1200,height=640)
font.add("myfont", "msyh.ttc")
showtext.begin()
ggplot()+
geom_polygon(data=shandong_district_map_data,aes(x=long,y=lat,group=group,fill=FA_GDPScale),col="grey60",size=.2)+
geom_point(data=shandong_district_data,aes(x=lon,y=lat,size=PerGDPGrowth),shape=21,fill="#098154",col="#ED7D31",alpha=.6)+ #ED7D31E02939
scale_size(range=c(1,8),guide=FALSE)+
scale_fill_brewer(palette="OrRd")+
coord_map("polyconic") +
labs(title="山东省各行政县(包含县级市)2016年GDP规模&人均GDP增速分布",subtitle="单位:(亿元)",caption="数据来源:山东省发展与改革委员会")+
guides(fill=guide_legend(reverse=TRUE,title=NULL))+
geom_text(data=text,aes(x=lon,y=lat-.1,label=Country),family="myfont",fontface="plain",size=4)+
theme(
title=element_text(family="myfont",size=18),
plot.title=element_text(size=24),
plot.subtitle=element_text(family="myfont",size=18),
#plot.caption=element_text(family="myfont",size=18),
legend.text.align=1,
legend.text=element_text(hjust=-5,size=12),
panel.grid = element_blank(),
panel.background = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank(),
axis.title = element_blank(),
legend.position = c(0.05,0.8),
plot.caption=element_text(hjust=0)
)
showtext.end()
dev.off()

DistrictPerGDPScale

除了GDP之外,还有另一个规模性指标——预算规模,接下来,我们针对预算规模来分析。

查看各县预算规模的极差分布状况。

1
2
3
4
5
6
7
8
9
10
11
12
13
summary(shandong_district_map_data$BudgetScale)
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
1.30 14.00 22.90 34.26 46.00 212.40 346
shandong_district_map_data$FA_BudgetScale<-cut(shandong_district_map_data$BudgetScale, breaks=c(0,40,80,120,160,240),labels=c('0~50','50~100','100~150','150~200','200~250'),order=TRUE)
> summary(shandong_district_map_data$FA_BudgetScale)
0~50 50~100 100~150 150~200 200~250 NA's
4999 1544 521 53 50 346
text1<-arrange(shandong_district_data,desc(BudgetScale))%>%select(Country,lon,lat,BudgetScale)
text1<-text1[1:10,]

山东省各行政县(包含县级市)2016年公共预算收入规模&增速分布

1
2
3
> summary(shandong_district_data$BudgetGrowth)
Min. 1st Qu. Median Mean 3rd Qu. Max.
-15.600 6.500 9.500 9.085 11.400 31.300
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
CairoPNG(file="DistrictBudgetScale.png",width=1200,height=640)
font.add("myfont", "msyh.ttc")
showtext.begin()
ggplot()+
geom_polygon(data=shandong_district_map_data,aes(x=long,y=lat,group=group,fill=FA_BudgetScale),col="grey60",size=.2)+
geom_point(data=shandong_district_data,aes(x=lon,y=lat,size=abs(BudgetGrowth)),shape=21,fill=ifelse(shandong_district_data$BudgetGrowth>0,"#FB832D","#014D64"),col="#ED7D31",alpha=.6)+ #气泡图颜色根据正负值分开填充
scale_size(range=c(1,8),guide=FALSE)+
scale_fill_brewer(palette="Greens")+
coord_map("polyconic") +
labs(title="山东省各行政县(包含县级市)2016年公共预算收入规模&增速分布",subtitle="单位:(亿元)",caption="数据来源:山东省发展与改革委员会")+
guides(fill=guide_legend(reverse=TRUE,title=NULL))+
geom_text(data=text1,aes(x=lon,y=lat-.1,label=Country),family="myfont",fontface="plain",size=4)+
theme(
title=element_text(family="myfont",size=18),
plot.title=element_text(size=24),
plot.subtitle=element_text(family="myfont",size=18),
#plot.caption=element_text(family="myfont",size=18),
legend.text.align=1,
legend.text=element_text(hjust=-5,size=12),
panel.grid = element_blank(),
panel.background = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank(),
axis.title = element_blank(),
legend.position = c(0.02,0.8),
plot.caption=element_text(hjust=0)
)
showtext.end()
dev.off()

DistrictBudgetScale

以上三个维度分别展示了山东省各县GDP规模与增速指标、GDP规模与人均GDP增速指标、财政公共预算收入与增速指标的分布情况。


接下来我们在呈现各县GDP相对于公共预算收入规模的分布情况。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
CairoPNG(file="DistrictGDP&Budget.png",width=1200,height=640)
font.add("myfont", "msyh.ttc")
showtext.begin()
ggplot()+
geom_polygon(data=shandong_district_map_data,aes(x=long,y=lat,group=group),col="grey60",fill="white",size=.2)+
geom_point(data=shandong_district_data,aes(x=lon,y=lat,size=GDPScale,fill=BudgetScale),shape=21,col="grey60",alpha=.8)+
scale_size(range=c(1,12),guide=FALSE)+
scale_fill_gradient2(low="#014D64",mid="grey",high="#C72E29",midpoint=range(na.omit(shandong_district_map_data$BudgetScale))/2,guide=FALSE)+
coord_map("polyconic") +
labs(title="山东省各行政县(包含县级市)2016年GDP规模&公共预算收入分布",subtitle="单位:(亿元)",caption="数据来源:山东省发展与改革委员会")+
annotate("text", x=114.8, y=38.3, label="● 高(预算)", color= "#C72E29", size=6) +
annotate("text", x=114.8, y=38, label="● 低(预算)", color= "#014D64", size=6) +
theme(
title=element_text(family="myfont",size=18),
plot.title=element_text(size=24),
plot.subtitle=element_text(family="myfont",size=18),
#plot.caption=element_text(family="myfont",size=18),
panel.grid = element_blank(),
panel.background = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank(),
axis.title = element_blank(),
legend.position = c(0.02,0.8),
plot.caption=element_text(hjust=0)
)
showtext.end()
dev.off()

DistrictGDP&Budget

下面是关于人均GDP增速与各县公共预算收入增速之间的关系:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
CairoPNG(file="DistrictPerGDPGrowth&BudgetGrodth.png",width=1200,height=640)
font.add("myfont", "msyh.ttc")
showtext.begin()
ggplot()+
geom_polygon(data=shandong_district_map_data,aes(x=long,y=lat,group=group),col="grey60",fill="white",size=.2)+
geom_point(data=shandong_district_data,aes(x=lon,y=lat,size=GDPScale),shape=21,fill="transparent",col="#014D64")+
geom_point(data=shandong_district_data,aes(x=lon,y=lat,size=BudgetScale),shape=21,fill="#C72E29",col="transparent",alpha=.6)+
scale_size(range=c(1,12),guide=FALSE)+
coord_map("polyconic") +
labs(title="山东省各行政县(包含县级市)2016年GDP增速&公共预算收入增速分布",subtitle="单位:(亿元)",caption="数据来源:山东省发展与改革委员会")+
annotate("text", x=114.8, y=38.3, label="○ GDP(增速)", color= "#014D64", size=6) +
annotate("text", x=114.8, y=38, label="● 预算(预算)", color= "#C72E29", size=6) +
theme(
title=element_text(family="myfont",size=18),
plot.title=element_text(size=24),
plot.subtitle=element_text(family="myfont",size=18),
#plot.caption=element_text(family="myfont",size=18),
panel.grid = element_blank(),
panel.background = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank(),
axis.title = element_blank(),
legend.position = c(0.02,0.8),
plot.caption=element_text(hjust=0)
)
showtext.end()
dev.off()

DistrictPerGDPGrowth&BudgetGrodth

以上过程确实有些烧脑,大篇幅的代码,可以就是代码驱动的可视化,让数据呈现更为直观,数据可视化本就服务于数据呈现,无助于数据呈现的可视化相当于数据灾难。

本篇算是学习R以来比较完善的一篇以实战为目的的案例练习,虽然写的有些杂乱,但是过程还是学习了很东西,补了很多平时遗忘的漏洞。


联系方式:
wechat:ljty1991
Mail:578708965@qq.com
个人公众号:数据小魔方(datamofang)

qq交流群:[魔方学院]298236508

个人简介:
杜雨
财经专业研究僧;
伪数据可视化达人;
文科背景的编程小白;
喜欢研究商务图表与地理信息数据可视化,爱倒腾PowerBI、SAP DashBoard、Tableau、R ggplot2、Think-cell chart等诸如此类的数据可视化软件,创建并运营微信公众号“数据小魔方”。
Mail:578708965@qq.com


备注信息:
知识共享许可协议
本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。

坚持原创技术分享,您的支持将鼓励我继续创作!