使用pyecharts绘制中国地图

转载自:(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)
#print(i)

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 数据设置为 Falseb 数据设置为 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"))

喜欢的点个赞❤吧!


使用pyecharts绘制中国地图
http://www.okko.tk/2023/06/08/使用pyecharts绘制中国地图/
作者
ZhJy
发布于
2023年6月8日
许可协议