pyecharts之Geo地图大法(详解,代码带注释+效果图)
近期项目上有地图自定义绘点+连线+分严重等级的需求,整了,分开处理啥都好说,多个数据放在同一维度的时候,只恨pyecharts的开发者为什么把功能整得这么简单,要点复杂的图都难搞,害!步入正题。
以下代码均可直接食用,且加上了宇宙无敌超级超级第一级别史无前有的 详细注释,带对应环境+版本号,直接看,直接用!!!!
(声明一下,网上太多的功能其实都是来自不同版本的,而不同版本之间很多功能都容易无法直接使用,且数据很多是不直接给的,或者没有效果图,看不到效果图就要咱先担着浪费时间找数据,改bug,改版本,还不一定是意向效果不知道参数意思的情况下去看,咱是真狗都 不想看)
地图自定义标点+连线
# 版本pyecharts==1.6.1,python3.7.6
import pandas as pd
from pyecharts.charts import Map, Geo
from pyecharts import options as opts
import random
from pyecharts.globals import ChartType,SymbolType
# 获取数据
d1 = [('测试点1', 114.8021, 27.8261), ('测试点2', 115.18, 29.16), ('测试点3', 114.279, 29.001), ('测试点4', 116.024, 28.1079), ('测试点5', 118.01, 28.97)]# 经纬度
# d2 = [('测试点1', 11), ('测试点2', 44), ('测试点3', 88), ('测试点4', 0), ('测试点5', 56)]# 数值大小
d3 = [('测试点1', '测试点2'),('测试点1', '测试点3'),('测试点4', '测试点5')]
map=Geo(init_opts=opts.InitOpts(width="1900px",height='1080px'))
map.add_schema(
maptype="江西",# 选择江西的板块地图
itemstyle_opts=opts.ItemStyleOpts(color = '#ECECECFF',border_color = '#ECECECFF'),# 板块颜色和边框颜色设置为相同
is_roam=True ,# 是否在鼠标移到节点上的时候突出显示节点以及节点的边和邻接节点。
)
# 根据经纬度自定义添加点
for i in d1:
map.add_coordinate(i[0], i[1], i[2])
# 添加图例和对应数值大小,自己选择是否添加,不想要可以i[1]改为0或者空字符''
map.add('第一组值',
[(i[0], i[1]) for i in d2],
type_=ChartType.SCATTER,
symbol_size=12,# 点大小
)
# 添加连线图
map.add(
"点连线",
d3, #需要显示的元组对
type_=ChartType.LINES,
effect_opts=opts.EffectOpts(
symbol=SymbolType.ARROW ,
symbol_size=1, # 游动图标点的大小
color="blue",# 线的颜色
period = 7,# 点到终点的时长,周期,秒
),
linestyle_opts=opts.LineStyleOpts(curve=0.4, color='#b0e2ff', opacity=0.3),# 线的样式,卷曲度,颜色,透明度, 设置is_polyline=True后线样式无效
is_polyline=True, # 取消连接线条尾部的箭头
)
map.set_series_opts(label_opts=opts.LabelOpts(is_show=False),# 取消设置点的数值标签
)
map.set_global_opts(
title_opts=opts.TitleOpts(title='测试图',
subtitle='测试专用'),
# visualmap_opts=opts.VisualMapOpts( # 设置不同严重程度的颜色, 不设置颜色时,将能看到实线条,推测该设置更改了某个设置线条的值
# # 以下5个参数来自2.0.4,在1.6.1版本中未验证
# # max_=100,# 最大数值
# # min_=0, # 最小数值
# # is_piecewise=True, # 是否将数值分组展示,默认渐变,不分组
# # range_color=['#8FFF88FF','#FFB37FFF','#DE3333FF'] # 渐变颜色组
# ),
# toolbox_opts = opts.ToolboxOpts()
)
map.render('测试地图.html')
# map.render_notebook()
效果图
地图自定义标点+连线+设置地点的不同值和颜色
# 版本pyecharts==1.6.1,python3.7.6
import pandas as pd
from pyecharts.charts import Map, Geo
from pyecharts import options as opts
import random
from pyecharts.globals import ChartType,SymbolType
# 获取数据
d1 = [('测试点1', 114.8021, 27.8261), ('测试点2', 115.18, 29.16), ('测试点3', 114.279, 29.001), ('测试点4', 116.024, 28.1079), ('测试点5', 118.01, 28.97)]# 经纬度
d2 = [('测试点1', 11), ('测试点2', 44), ('测试点3', 88), ('测试点4', 0), ('测试点5', 56)]# 数值大小
d3 = [('测试点1', '测试点2'),('测试点1', '测试点3'),('测试点4', '测试点5')]
map=Geo(init_opts=opts.InitOpts(width="1900px",height='1080px'))
map.add_schema(
maptype="江西",# 选择江西的板块地图
itemstyle_opts=opts.ItemStyleOpts(color = '#ECECECFF',border_color = '#ECECECFF'),# 板块颜色和边框颜色设置为相同
is_roam=True ,# 是否在鼠标移到节点上的时候突出显示节点以及节点的边和邻接节点。
)
# 根据经纬度自定义添加点
for i in d1:
map.add_coordinate(i[0], i[1], i[2])
# 添加图例和对应数值大小,自己选择是否添加
map.add('第一组值',
[(i[0], i[1]) for i in d2],
type_=ChartType.SCATTER,
symbol_size=12,# 点大小
)
# 添加连线图
map.add(
"点连线",
d3, #需要显示的元组对
type_=ChartType.LINES,
effect_opts=opts.EffectOpts(
symbol=SymbolType.ARROW ,
symbol_size=1, # 游动图标点的大小
color="blue",# 线的颜色
period = 7,# 点到终点的时长,周期,秒
),
linestyle_opts=opts.LineStyleOpts(curve=0.2, color='#b0e2ff', opacity=0.3),# 线的样式,卷曲度,颜色,透明度, 设置is_polyline=True后线样式无效
# is_polyline=True, # 取消连接线条尾部的箭头
)
map.set_series_opts(label_opts=opts.LabelOpts(is_show=False),# 取消设置点的数值标签
)
map.set_global_opts(
title_opts=opts.TitleOpts(title='测试图',
subtitle='测试专用'),
visualmap_opts=opts.VisualMapOpts( # 设置不同严重程度的颜色, 不设置颜色时,将能看到实线条,推测该设置更改了某个设置线条的值
# 以下5个参数来自2.0.4,在1.6.1版本中未验证
# max_=100,# 最大数值
# min_=0, # 最小数值
# is_piecewise=True, # 是否将数值分组展示,默认渐变,不分组
# range_color=['#8FFF88FF','#FFB37FFF','#DE3333FF'] # 渐变颜色组
),
# toolbox_opts = opts.ToolboxOpts()
)
map.render('测试地图2.html')
# map.render_notebook()
效果图
地图自定义标点+连线+设置地点的不同值和颜色+时间线叠加图层
# 版本pyecharts==1.6.1,python3.7.6
import pandas as pd
from pyecharts.charts import Map, Geo
from pyecharts import options as opts
import random
from pyecharts.globals import ChartType,SymbolType
from pyecharts.charts import Bar, Timeline
# 获取数据
d1 = [('测试点1', 114.8021, 27.8261), ('测试点2', 115.18, 29.16), ('测试点3', 114.279, 29.001), ('测试点4', 116.024, 28.1079), ('测试点5', 118.01, 28.97)]# 经纬度
d2 = [('测试点1', 11), ('测试点2', 44), ('测试点3', 88), ('测试点4', 0), ('测试点5', 56)]# 数值大小
d3 = [('测试点1', '测试点2'),('测试点1', '测试点3'),('测试点4', '测试点5')]
d4 = ['某年月日1', '某年月日2', '某年月日3', '某年月日4']
timeline = Timeline()
for ind, my_map in enumerate(d4):
map=Geo(init_opts=opts.InitOpts(width="1900px",height='1080px'))
map.add_schema(
maptype="江西",# 选择江西的板块地图
itemstyle_opts=opts.ItemStyleOpts(color = '#ECECECFF',border_color = '#ECECECFF'),# 板块颜色和边框颜色设置为相同
is_roam=True ,# 是否在鼠标移到节点上的时候突出显示节点以及节点的边和邻接节点。
)
# 根据经纬度自定义添加点
for i in d1:
map.add_coordinate(i[0], i[1], i[2])
# 添加图例和对应数值大小,自己选择是否添加
map.add('第一组值',
[(i[0], i[1]+20*ind) for i in d2],# 为了在不同时间中能看出变化,作者在所有值里加了20,方便看到动态变化的效果
type_=ChartType.SCATTER,
symbol_size=12,# 点大小
)
# 添加连线图
map.add(
"点连线",
d3, #需要显示的元组对
type_=ChartType.LINES,
effect_opts=opts.EffectOpts(
symbol=SymbolType.ARROW ,
symbol_size=1, # 游动图标点的大小
color="blue",# 线的颜色
period = 7,# 点到终点的时长,周期,秒
),
linestyle_opts=opts.LineStyleOpts(curve=0.2, color='#b0e2ff', opacity=0.3),# 线的样式,卷曲度,颜色,透明度, 设置is_polyline=True后线样式无效
# is_polyline=True, # 取消连接线条尾部的箭头
)
map.set_series_opts(label_opts=opts.LabelOpts(is_show=False),# 取消设置点的数值标签
)
map.set_global_opts(
title_opts=opts.TitleOpts(title='测试图',
subtitle='测试专用'),
visualmap_opts=opts.VisualMapOpts( # 设置不同严重程度的颜色, 不设置颜色时,将能看到实线条,推测该设置更改了某个设置线条的值
# 以下5个参数来自2.0.4,在1.6.1版本中未验证
# max_=100,# 最大数值
# min_=0, # 最小数值
# is_piecewise=True, # 是否将数值分组展示,默认渐变,不分组
# range_color=['#8FFF88FF','#FFB37FFF','#DE3333FF'] # 渐变颜色组
),
# toolbox_opts = opts.ToolboxOpts()
)
timeline.add(map, my_map)# 添加单个图到对应时间线中
timeline.add_schema(is_auto_play=False, play_interval=1000)# 设置是否自动循环播放和播放间隔
timeline.render('测试地图-timeline.html')