转载自:(18条消息) 2022见证中国崛起从Python绘制中国地图开始:使用pyecharts最新版本绘制中国地图实例详解,个性化地图定制及常用参数解析_挣扎的蓝藻的博客-CSDN博客
Python 地图篇 - 使用 pyecharts 绘制世界地图、中国地图、省级地图、市级地图实例详解
先给大家看下效果图哈。
首先需要安装 pyecharts 库,直接 pip install pyecharts
就好了。
新版本的话不需要单独安装地图,如果是 0.5 版本是需要单独安装的,目前演示的是当前最新版本 1.9.1
地图数据如下:
因为是中国地图,所以对标的省份,我设置了 2 组,里面的数据是随机生成的。
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 30 31 32 33 34 35 36 37 38
| from pyecharts import options as opts from pyecharts.charts import Map import random
ultraman = [ ['四川', 0], ['台湾', 0], ['新疆', 0], ['江西', 0], ['河南', 0], ['辽宁', 0], ['西藏', 0] ]
monster = [ ['广东', 0], ['北京', 0], ['上海', 0], ['江西', 0], ['湖南', 0], ['浙江', 0], ['江苏', 0] ]
def data_filling(array): ''' 作用:给数组数据填充随机数 ''' for i in array: for j in i: i[1] = random.randint(1,1000)
data_filling(ultraman) data_filling(monster)
|
首先演示下添加一组数据,运行后会生成一个 html 文件,打开后就可以查看生成的地图了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| def create_china_map(): ''' 作用:生成中国地图 ''' ( Map() .add( series_name="怪兽", data_pair=monster, maptype="china", ) .set_global_opts(title_opts=opts.TitleOpts(title="中国地图")) .render("中国地图.html") )
|
然后演示下添加两组数据,只要再加个 add() 函数就好了,非常方便。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| def create_china_map(): ''' 作用:生成中国地图 ''' ( Map() .add( series_name="奥特曼", data_pair=ultraman, maptype="china", ) .add( series_name="怪兽", data_pair=monster, maptype="china", ) .set_global_opts(title_opts=opts.TitleOpts(title="中国地图")) .render("中国地图.html") )
|
给大家加了块完整源码,直接运行即可哈。
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| from pyecharts import options as opts from pyecharts.charts import Map import random
ultraman = [ ['四川', 0], ['台湾', 0], ['新疆', 0], ['江西', 0], ['河南', 0], ['辽宁', 0], ['西藏', 0] ]
monster = [ ['广东', 0], ['北京', 0], ['上海', 0], ['江西', 0], ['湖南', 0], ['浙江', 0], ['江苏', 0] ]
def data_filling(array): ''' 作用:给数组数据填充随机数 ''' for i in array: i[1] = random.randint(1,1000) print(i)
data_filling(ultraman) data_filling(monster)
def create_china_map(): ''' 作用:生成中国地图 ''' ( Map() .add( series_name="奥特曼", data_pair=ultraman, maptype="china", ) .add( series_name="怪兽", data_pair=monster, maptype="china", ) .set_global_opts(title_opts=opts.TitleOpts(title="中国地图")) .render("中国地图.html") )
create_china_map()
|
默认是选中的,添加 is_selected=False
参数可以设置默认不显示。
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
| def create_china_map(): ''' 作用:生成中国地图 ''' ( Map() .add( series_name="奥特曼", data_pair=ultraman, maptype="china", is_selected=False ) .add( series_name="怪兽", data_pair=monster, maptype="china", ) .set_global_opts(title_opts=opts.TitleOpts(title="中国地图")) .render("中国地图.html") )
create_china_map()
|
可以看到默认只显示了怪兽的数据。
视觉映射配置项 visualmap_opts=opts.VisualMapOpts(max_=1000, is_piecewise=True)
可以设置为地图颜色类型分段显示,max_
的值对应的是数据的范围,参数 is_piecewise=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 28
| def create_china_map(): ''' 作用:生成中国地图 ''' ( Map() .add( series_name="奥特曼", data_pair=ultraman, maptype="china", is_selected=True ) .add( series_name="怪兽", data_pair=monster, maptype="china", ) .set_global_opts( title_opts=opts.TitleOpts(title="中国地图"), visualmap_opts=opts.VisualMapOpts(max_=1000, is_piecewise=True) ) .render("中国地图.html") )
|
分段显示效果图:
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
| def create_china_map(): ''' 作用:生成中国地图 ''' ( Map() .add( series_name="奥特曼", data_pair=ultraman, maptype="china", is_selected=True ) .add( series_name="怪兽", data_pair=monster, maptype="china", ) .set_global_opts( title_opts=opts.TitleOpts(title="中国地图"), visualmap_opts=opts.VisualMapOpts(max_=1000, is_piecewise=False) ) .render("中国地图.html") )
|
这是参数为 is_piecewise=False
的标准显示。
参数 is_roam=False
会控制不可进行鼠标缩放和平移。
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 30 31
| def create_china_map(): ''' 作用:生成中国地图 ''' ( Map() .add( series_name="奥特曼", data_pair=ultraman, maptype="china", is_selected=True, is_roam=False ) .add( series_name="怪兽", data_pair=monster, maptype="china", ) .set_global_opts( title_opts=opts.TitleOpts(title="中国地图"), visualmap_opts=opts.VisualMapOpts(max_=1000, is_piecewise=False) ) .render("中国地图.html") )
|
参数启用时鼠标滚轮可以放大缩小图像。
鼠标可以左右拖动使地图平移。
优先级声明: a 数据设置为 False,b 数据设置为 True,不选中 a 数据,也可以进行缩放和平移拖动。
参数 is_map_symbol_show=False
可以关闭图形标记,关闭就不显示点了。
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 30 31 32
| def create_china_map(): ''' 作用:生成中国地图 ''' ( Map() .add( series_name="奥特曼", data_pair=ultraman, maptype="china", is_selected=True, is_roam=True, is_map_symbol_show=False ) .add( series_name="怪兽", data_pair=monster, maptype="china", ) .set_global_opts( title_opts=opts.TitleOpts(title="中国地图"), visualmap_opts=opts.VisualMapOpts(max_=1000, is_piecewise=False) ) .render("中国地图.html") )
|
可以看到奥特曼相关区域的点已经没有了。
系列配置项的参数 label_opts=opts.LabelOpts(is_show=False)
可以关闭标签名称显示。
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 30 31 32 33 34 35 36
| def create_china_map(): ''' 作用:生成中国地图 ''' ( Map() .add( series_name="奥特曼", data_pair=ultraman, maptype="china", is_selected=True, is_roam=True, is_map_symbol_show=False ) .add( series_name="怪兽", data_pair=monster, maptype="china", ) .set_global_opts( title_opts=opts.TitleOpts(title="中国地图"), visualmap_opts=opts.VisualMapOpts(max_=1000, is_piecewise=False), ) .set_series_opts(label_opts=opts.LabelOpts(is_show=False)) .render("中国地图.html") )
|
可以看到省份的名称不显示了。
将 label_opts=opts.LabelOpts(is_show=False)
添加到 add() 里,可以实现局部显示标签名的效果,显示标签的为另一组数据,可以根据此特性灵活进行应用。
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 30 31 32 33 34 35
| def create_china_map(): ''' 作用:生成中国地图 ''' ( Map() .add( series_name="奥特曼", data_pair=ultraman, maptype="china", is_selected=True, is_roam=True, is_map_symbol_show=False, label_opts=opts.LabelOpts(is_show=False) ) .add( series_name="怪兽", data_pair=monster, maptype="china", ) .set_global_opts( title_opts=opts.TitleOpts(title="中国地图"), visualmap_opts=opts.VisualMapOpts(max_=1000, is_piecewise=False), ) .render("中国地图.html") )
|
可以看到局部省份的名称有显示。
系列配置项里的标签加上 color="bule"
参数可设置标签颜色为蓝色。
图元样式配置的 areaColor
为区域颜色, borderColor
为边框颜色,
其中 normal
为常规模式下的,emphasis
为强调样式下的,即鼠标移动到区域上的显示。
1 2 3 4 5 6 7
| itemstyle_opts={ "normal": {"areaColor": "white", "borderColor": "red"}, "emphasis": {"areaColor": "rgba(0,0,0,1)"} }
|
可以看到我鼠标移动到新疆显示的为我设置的黑色,透明度为 1。
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| def create_china_map(): ''' 作用:生成中国地图 ''' ( Map() .add( series_name="奥特曼", data_pair=ultraman, maptype="china", is_selected=True, is_roam=True, is_map_symbol_show=False, itemstyle_opts={ "normal": {"areaColor": "white", "borderColor": "red"}, "emphasis": {"areaColor": "rgba(0,0,0,1)"} } ) .add( series_name="怪兽", data_pair=monster, maptype="china", ) .set_global_opts( title_opts=opts.TitleOpts(title="中国地图"), visualmap_opts=opts.VisualMapOpts(max_=1000, is_piecewise=False) ) .set_series_opts( label_opts=opts.LabelOpts(is_show=True, color="blue") ) .render("中国地图.html") )
|
Map() 里通过添加 init_opts 参数可以配置初始化画布大小。
例如: Map(init_opts=opts.InitOpts(height="1000px", width="1500px"))
喜欢的点个赞❤吧!