使用pyecharts绘制中国地图或省地图
在某个项目中,需要在中国地图的基础上,将某些特定省份选中,或者在某个省地图的基础上,将某些特定的市选中。话不多说,上图就明白了。
这个应用目标比较火的就是绘制新冠肺炎每个省或者每个市的确诊人数,通过区域颜色来区分程度或者数量。这个东西用python一样可以做,而且非常简单。
线上代码来解释吧。
import pandas as pd from pyecharts import options as ops from pyecharts.charts import Map city = 'hubei' #城市名称 city_chinese = '湖北' file = r'C:\Users\DELL\Desktop\yang\{0}{1}'.format(city,'.csv') data = pd.read_csv(file,encoding='gbk') list = [list(z) for z in zip(data['Chinese_province'],data['num'])] namemap=dict(zip(data['province'],data['Chinese_province'])) print(namemap) c= Map(ops.InitOpts(width='1200px',height='1200px')) c.add('province',list,city_chinese,is_selected=True,name_map=namemap) # c.set_global_opts(title_opts=ops.TitleOpts(title=city),visualmap_opts=ops.VisualMapOpts(max_=2, is_piecewise=False,range_color=['#8EC0E4','#67D5B5'])) #c.set_series_opts(label_opts=ops.LabelOpts(font_size = 22,font_family="Times New Roman",is_show=True, color="blue")) #font_size调字号 font_family调字体 color调字体颜色 c.render(city+'.html')
以湖北省为例,湖北省的地图不是自己画的,而是用了一个第三方库,也就是 from pyecharts.charts import Map
c= Map(ops.InitOpts(width='1200px',height='1200px')) 实例化一个对象c,c就是我们要画的图,width和height是画布的大小。
c.add('province',list,city_chinese,is_selected=True,name_map=namemap) city_chinese是你要花哪个城市的,如果是要画中国的,也就改为‘中国’,如果画河北省的,就改为‘河北’就可以了。
list是一个列表,,也就是说这个里的参数大概是这样的一个格式:[['城市名称1','数量1'],['城市名称2','数量2'],['城市名称3','数量3'],…],数量为了后期标颜色深浅用的。如果是前边提到的疫情确诊数量统计的话,那这里就是确诊人数。
这里为啥是要用拼音呢?因为项目中所画的图是要投国外期刊,需要转换成英文,那这样的话,需要有一个中英文转换,也就是代码中namemap的作用。看一下csv文件里的内容就明白了。
截图只展示了一部分地级市,应该把所有的市都罗列出来,不然没有罗列到的市是在地图里仍然显示中文。
需要注意的是namemap是一个字典类型。
{'武汉市': 'Wuhan', '黄冈市': 'Huanggang', '孝感市': 'Xiaogan',…}
c.set_global_opts()用来设置一些参数,比如 title_opts=ops.TitleOpts(title=city) 图的名字,visualmap_opts=ops.VisualMapOpts(max_=2, is_piecewise=False,range_color=['#8EC0E4','#67D5B5'])),max_是说地图每个地区的值最大是2,就是csv文件里num的一列,is_piecewise不划分具体的等级,range_color区分颜色范围是['#8EC0E4','#67D5B5']。
is_piecewise不太好形容,True或者Flase看图吧:
这是False:
这是Ture:
图中可以看到,默认是分隔分为5个区间的,这个也可以设置参数split_number
c.set_series_opts()也是用来设置一些参数的,比如地图里的字号大小啊,字体啊,字体颜色啊,等等,看注释应该看的明白,或者自己试一下就好。
最后的c.render(city+'.html')是生成一个html文件,图就在里边,用浏览器打开就行。如果需要存为图的话,点击页面另存为就好了。
over,亲测有效。