查看原文
其他

数据可视化之地理坐标系

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:钱梦璇

文字编辑:孙晓玲

技术总编:张   邯


之前的推文《数据可视化之地理图》向大家介绍了地理图表中的Map图绘制,这次小编将介绍地理坐标系Geo图形的绘制。这两种图很相似,但也有不同点。

举个例子

数据来自中国统计年鉴中2017年末全国各地区人口总数,用Geo图可视化:

from pyecharts import options as opts from pyecharts.charts import Geo
#数据来源:知网-中国统计年鉴data=[ ("北京","2171"),("天津","1557"),("河北","7520"),("内蒙古","2529"),("辽宁","4369"),("吉林","2717"), ("黑龙江","3789"),("上海","2418"),("江苏","8029"),("浙江","5657"),("安徽","6255"),("福建","3911"), ("江西","4622"),("山东","10006"),("河南","9559"),("湖北","5902"),("湖南","6860"),("广东","11169"), ("广西","4885"),("海南","926"),("重庆","3075"),("四川","8302"),("贵州","3580"),("云南","4801"), ("西藏","337"),("陕西","3835"),("甘肃","2626"),("青海","598"),("宁夏","682"),("新疆","2445"),]pop_geo = ( Geo() .add_schema(maptype="china") .add("",data) .set_series_opts(label_opts=opts.LabelOpts(is_show=True)) #标签显示即为每个地区对应的人口数 .set_global_opts(title_opts=opts.TitleOpts(title="全国年度人口数",subtitle="数据来源:中国统计年鉴(万人)",pos_right="center",pos_top="5%"), visualmap_opts=opts.VisualMapOpts(max_=11169,pos_left="8%",is_piecewise=True)))pop_geo.render_notebook()

Geo与Map不同处:

1.Map图直接在每个省和直辖市上填充颜色,通过观察颜色的相同和不同来分析各个地区的信息,而Geo图是用可以自定义的一个点或一条线来显示信息。

2.Map中add的时候需要添加地图属性'china',但是Geo中需要额外添加一句geo.add_schema(maptype="china")来设置地图类型。

此外,LabelOpts标签对应的是每个地区对应的人口数,is_show=True表明在Geo中显示。VisualMapOpts视觉配置项设置为分段,并将组件最大值设定为11169(数据中最大值—广东省人口数(万人))。

图形如下:


改变Geo图表类型

与Map不同的,Geo可以设置不同的图表类型。将GeoType设置为HEATMAP效果:

from pyecharts import options as opts from pyecharts.charts import Geo from pyecharts.globals import GeoType #Geo图的类型
data=[ ("北京","2171"),("天津","1557"),("河北","7520"),("内蒙古","2529"),("辽宁","4369"),("吉林","2717"), ("黑龙江","3789"),("上海","2418"),("江苏","8029"),("浙江","5657"),("安徽","6255"),("福建","3911"), ("江西","4622"),("山东","10006"),("河南","9559"),("湖北","5902"),("湖南","6860"),("广东","11169"), ("广西","4885"),("海南","926"),("重庆","3075"),("四川","8302"),("贵州","3580"),("云南","4801"), ("西藏","337"),("陕西","3835"),("甘肃","2626"),("青海","598"),("宁夏","682"),("新疆","2445"),]pop_geo = ( Geo() .add_schema(maptype="china") .add("",data,type_=GeoType.HEATMAP) #热度效果HEATMAP.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) .set_global_opts(title_opts=opts.TitleOpts(title="全国年度人口数",subtitle="数据来源:中国统计年鉴(万人)",pos_right="center",pos_top="5%"), visualmap_opts=opts.VisualMapOpts(max_=11169,pos_left="8%",is_piecewise=True)))pop_geo.render_notebook()

图形如下:

将GeoType设置为EFFECT_SCATTER效果:

from pyecharts import options as opts from pyecharts.charts import Geo from pyecharts.globals import GeoType #Geo图的类型
data=[ ("北京","2171"),("天津","1557"),("河北","7520"),("内蒙古","2529"),("辽宁","4369"),("吉林","2717"), ("黑龙江","3789"),("上海","2418"),("江苏","8029"),("浙江","5657"),("安徽","6255"),("福建","3911"), ("江西","4622"),("山东","10006"),("河南","9559"),("湖北","5902"),("湖南","6860"),("广东","11169"), ("广西","4885"),("海南","926"),("重庆","3075"),("四川","8302"),("贵州","3580"),("云南","4801"), ("西藏","337"),("陕西","3835"),("甘肃","2626"),("青海","598"),("宁夏","682"),("新疆","2445"),]pop_geo = ( Geo() .add_schema(maptype="china") .add("",data,type_=GeoType.EFFECT_SCATTER) #涟漪效果 .set_series_opts(label_opts=opts.LabelOpts(is_show=False)) .set_global_opts(title_opts=opts.TitleOpts(title="全国年度人口数",subtitle="数据来源:中国统计年鉴(万人)",pos_right="center",pos_top="5%"), visualmap_opts=opts.VisualMapOpts(max_=11169,pos_left="8%",is_piecewise=True)))pop_geo.render_notebook()
图形如下:


添加选项(改变图表画布的大小 + 改变主题 + 在图上连线)

Geo还有另一种图表类型GeoType.LINES,选取一部分人口数很大的数据举例:

from pyecharts import options as opts from pyecharts.charts import Geo # 地理坐标系绘制方法from pyecharts.globals import GeoType,ThemeType,SymbolType #Geo图的类型 主题 涟漪图形符号data=[("四川","8302"),("山东","10006"),("河南","9559"),("湖南","6860"),("广东","11169")]pop_geo = (Geo(init_opts=opts.InitOpts(width="600px",height="500px",theme=ThemeType.VINTAGE)) .add_schema(maptype="china",itemstyle_opts=opts.ItemStyleOpts(color="#FFB90F", border_color="#EE2C2C")) .add("",data,type_=GeoType.EFFECT_SCATTER,symbol_size=10) #有个问题,这里的颜色怎么都设置不好 .add("",[("广东","四川"),("广东","山东"),("广东","湖南"),("广东","河南")],type_=GeoType.LINES, effect_opts=opts.EffectOpts(symbol=SymbolType.ARROW), linestyle_opts=opts.LineStyleOpts(curve=0.2,color="#B0E2FF")).set_series_opts(label_opts=opts.LabelOpts(is_show=False)) .set_global_opts(title_opts=opts.TitleOpts(title="全国年度人口数",subtitle="数据来源:中国统计年鉴(万人)",pos_right="center",pos_top="5%")) )pop_geo.render_notebook()
用初始化配置项InitOpts(一般在创建实例的时候设置,也就是在Geo()里面)来设置图表画布宽度和高度。图表画布的高度和宽度单位为"px",这是css的长度单位。css是指层叠样式表,它定义了如何显示HTML元素,就像HTML中的字体标签和颜色属性所起的作用一样。ThemeType设置不同主题效果,pyecharts内置提供了 10+ 种不同的风格,另外也提供了便捷的定制主题的方法。内置主题类型可查看pyecharts.globals.ThemeType。
在add_schma中添加图元样式配置项:图形的背景颜色和边界颜色。图形的颜色可以使用 RGB 表示,比如'rgb(128, 128, 128)',也可以使用十六进制格式,比如 '#ccc'。
RGB介绍(一部分来源于百度百科):
(1)RGB

RGB色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。

(2)应用:

目前的显示器大都是采用了RGB颜色标准,在显示器上,是通过电子枪打在屏幕的红、绿、蓝三色发光极上来产生色彩的,目前的电脑一般都能显示32位颜色,有一千万种以上的颜色。电脑屏幕上的所有颜色,都由这红色绿色蓝色三种色光按照不同的比例混合而成的。一组红色绿色蓝色就是一个最小的显示单位。屏幕上的任何一个颜色都可以由一组RGB值来记录和表达。因此这红色绿色蓝色又称为三原色光,用英文表示就是R(red)、G(green)、B(blue)。在电脑中,RGB的所谓“多少”就是指亮度,并使用整数来表示。

通常情况下,RGB各有256级亮度,用数字表示为从0、1、2...直到255。注意虽然数字最高是255,但0也是数值之一,因此共256级。如同2000年到2010年共是11年一样。按照计算,256级的RGB色彩总共能组合出约1678万种色彩,即256×256×256=16777216。通常也被简称为1600万色或千万色。也称为24位色(2的24次方)。

(3)格式

对一种颜色进行编码的方法统称为“颜色空间”或“色域”。用最简单的话说,世界上任何一种颜色的“颜色空间”都可定义成一个固定的数字或变量。RGB(红、绿、蓝)只是众多颜色空间的一种。采用这种编码方法,每种颜色都可用三个变量来表示-红色绿色以及蓝色的强度。由于网页(WEB)是基于计算机浏览器开发的媒体,所以颜色以光学颜色RGB(红、绿、蓝)为主。网页颜色是以16进制代码表示,一般格式为#DEFABC(字母范围从A-F,数字从0-9 );如黑色,在网页代码中便是:#000000(在css编写中可简写为#000)。当颜色代码为#AABB11时,可以简写为#AB1表示,如#135与#113355表示同样的颜色。

有很多网站专门提供了RGB颜色查询工具,囊括了各种颜色与十进制/十六进制的转换,甚至可以自己设置喜欢的颜色并生成对应的进制值。如:"https://m.fontke.com/tool/rgb/" 和"https://www.114la.com/other/rgb.htm"。

RGB颜色对照表如下图所示:

在.add()中设置Geo图的类型为涟漪图形EFFECT_SCATTER,并改变标记图形的大小size,也就是点的大小。

EffectOpt为连线加上涟漪特效,用涟漪特效配置项 EffectOpts:symbol是涟漪特效图形的标记,这里设置为SymbolType.ARROW—“伞形”。线样式配置项LineStyleOpts,其中curve表示线的弯曲程度,当为0时表示完全不弯曲。

最后,渲染图形如下:

是不是很有趣呢?快来动手操作一下吧~


对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
SFI:Stata与Python的数据交互手册(一)
Stata模拟构建朋友圈
一个粉丝的疑惑—— local和scalar
新的一年,效率满满~(下)

自科基金项目信息爬取

rename group批量修改变量名

小命令,大不同——insobs插入新值

新的一年,效率满满~(上)

圆蛋快乐
BvD最后一弹——宏观数据宝典
一招搞定并购数据
多图“预警”(二)

您的圣诞礼物到了,请注意查收

BvD数据库介绍之Oriana

frlink:让连接更具“目的性”

多图“预警”(一)

Selenium的等待方式

关于我们

微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。







您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存