下篇(续)
接下来我们进入地图制作环节:
市级地图:(这两将包含两幅地图:GDP规模、公共预算收入规模)
为了更加明显的呈现出各个地级市的GDP和预算规模,这里我准备将两个指标的连续数值型变量切割成有序分段因子变量。
首先浏览下各市GDP的极差分布:
> range(shandong_city_map_data$SUM_GDPScale)
[1] 703 9901
所以这里范围使用0~10000,均分为5组;
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)
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()
浏览下各市公共预算规模的极差分布:
> range(shandong_city_map_data$SUM_BudgetScale)
[1] 47.2 1003.3
使用直方图大致了解下最终的预算规模数据分布;
ggplot(shandong_city_map_data,aes(SUM_BudgetScale))+geom_histogram()
所以这里范围使用0~1200,不等分为5组;
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()
以上是地级市数据可视化两个维度的全部代码,通过2016GDP规模以公共预算支出的规模对比可以发现,山东省地区间经济发展水平差异还是很大的,其中青岛在两个指标上都遥遥领先,也是全国为数不多的地级市发展好于省会的城市之一。
县级地图,以下过程将会输出五福图形,展示山东省县级行政区在GDP和预算规模的绝对量、增长率等各维度信息。分别包含GDP规模与增速、GDP规模与人均GDP增速、预算规模与预算增速、GDP规模与预算规模、GDP增速与预算增速对比。
为了与上面过程保持一致,这里的绝对量还是要换算成分段因子变量,这样比较适合通过分段颜色来更好的呈现山东省各县的相关数据信息。
首先还是简略查看下GDP的极差分布:
range(shandong_district_map_data$GDPScale)
[1] 67 2766
shandong_district__data
ggplot(shandong_district_map_data,aes(GDPScale))+geom_histogram()
可以看出来,县级地区GDP的分布比较诡异,出现了一个特别的值,其他县市都集中在1200以下。
sqldf("SELECT address,Max(GDPScale) AS GDPmax FROM shandong_district_data")
address GDPmax
1 山东省青岛市黄岛区 2766
果然青岛市各县GDP黄岛区占了大头儿。如果数据分布不是很规律的话,平均分组可能 导致有些组没数据,有些组特别集中的情况。
这里尝试着对各县GDP进行分组,期待能够分组合理的利用可视化呈现的分组。
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规模&增速分布
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()
#山东省各行政县(包含县级市)2016年GDP规模&人均GDP增速分布
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()
除了GDP之外,还有另一个规模性指标——预算规模,接下来,我们针对预算规模来分析。
查看各县预算规模的极差分布状况。
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年公共预算收入规模&增速分布
> 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
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()
以上三个维度分别展示了山东省各县GDP规模与增速指标、GDP规模与人均GDP增速指标、财政公共预算收入与增速指标的分布情况。
接下来我们在呈现各县GDP相对于公共预算收入规模的分布情况。
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()
下面是关于人均GDP增速与各县公共预算收入增速之间的关系:
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()
以上过程确实有些烧脑,大篇幅的代码,可以就是代码驱动的可视化,让数据呈现更为直观,数据可视化本就服务于数据呈现,无助于数据呈现的可视化相当于数据灾难。
本篇算是学习R以来比较完善的一篇以实战为目的的案例练习,虽然写的有些杂乱,但是过程还是学习了很东西,补了很多平时遗忘的漏洞。