偶然发现动态地图很有意思,可以根据时间的变化清晰的展现出某件事情的发展规律,今天以我国GDP排名情况为例,教大家用pyecharts画出动态地图
主要用到Timeline,Map库函数,具体步骤如下:
1.导入数据
import pyecharts.options as opts
from pyecharts.globals import ThemeType
from pyecharts.commons.utils import JsCode
from pyecharts.charts import Timeline,Map
data = [
{
"time": 1980,
"data": [
{"name": "台湾", "value": [633.76, 12.28, "台湾"]},
{"name": "香港", "value": [432.47, 8.38, "香港"]},
{"name": "江苏", "value": [319.8, 6.2, "江苏"]},
{"name": "上海", "value": [311.89, 6.05, "上海"]},
{"name": "山东", "value": [292.13, 5.66, "山东"]},
{"name": "辽宁", "value": [281, 5.45, "辽宁"]},
{"name": "广东", "value": [249.65, 4.84, "广东"]},
{"name": "四川", "value": [229.31, 4.44, "四川"]},
{"name": "河南", "value": [229.16, 4.44, "河南"]},
{"name": "黑龙江", "value": [221, 4.28, "黑龙江"]},
],
},
]
2.绘制基本地图
map_data = [
[[x["name"], x["value"]] for x in d["data"]] for d in data if d["time"] == 1980
][0]
print(map_data)
min_data, max_data = (
min([d[1][0] for d in map_data]),
max([d[1][0] for d in map_data]),
)
map_chart = (
Map()
.add(
series_name="",
data_pair=map_data,
)
)
map_chart.render_notebook()
首先对刚才的数据进行转换,将其转换成如下格式:
[['台湾', [633.76, 12.28, '台湾']], ['香港', [432.47, 8.38, '香港']], ['江苏', [319.8, 6.2, '江苏']], ['上海', [311.89, 6.05, '上海']], ['山东', [292.13, 5.66, '山东']], ['辽宁', [281, 5.45, '辽宁']], ['广东', [249.65, 4.84, '广东']], ['四川', [229.31, 4.44, '四川']], ['河南', [229.16, 4.44, '河南']], ['黑龙江', [221, 4.28, '黑龙江']]]
这个列表循环加判断的用法很有意思,大家可以着重研究一下
3.为地图添加样式
map_data = [
[[x["name"], x["value"]] for x in d["data"]] for d in data if d["time"] == 1980
][0]
min_data, max_data = (
min([d[1][0] for d in map_data]),
max([d[1][0] for d in map_data]),
)
map_chart = (
Map()
.add(
series_name="",
data_pair=map_data,
label_opts=opts.LabelOpts(is_show=True, #是否显示省市名字
color='#EE1289', #名字颜色
font_size=10), #名字大小
is_map_symbol_show=True, #标记被选中的图形
itemstyle_opts={
"normal": {"areaColor": "#473C8B", "borderColor": "#404a59"}, #设置区域和边界颜色
"emphasis": {
"label": {"show": Timeline},
"areaColor": "rgba(255,255,255, 0.5)",
},
},
)
.set_global_opts(
title_opts=opts.TitleOpts(
title="1980年以来中国各省GDP排名变化情况", #设置标题
subtitle="GDP单位:亿元", #设置副标题
pos_left="center", #设置标题左右位置
pos_top="top", #设置标题垂直位置
title_textstyle_opts=opts.TextStyleOpts(
font_size=25, color="rgba(238,0,238, 0.9)" #设置标题字体和颜色
),
),
tooltip_opts=opts.TooltipOpts( #设置文本格式
is_show=True,
formatter=JsCode(
"""function(params) {
if ('value' in params.data) {
return params.data.value[2] + ': ' + params.data.value[0];
}
}"""
),
),
visualmap_opts=opts.VisualMapOpts(
is_calculable=True, #是否显示拖拽用的手柄
dimension=0, #组件映射维度
pos_left="10", #地图左右位置
pos_top="center", #地图上下位置
range_text=["High", "Low"],
range_color=["lightskyblue", "yellow", "orangered"], #左侧视觉映射图形颜色
textstyle_opts=opts.TextStyleOpts(color="#FFAEB9"), #左侧视觉映射文本颜色
min_=min_data,
max_=max_data,
),
)
)
map_chart.render_notebook()
LabelOpts:设置地图省市文字的大小和颜色
itemstyle_opts:设置地图底色和边界颜色
TitleOpts:设置标题和副标题样式
TooltipOpts:设置文本格式,鼠标触摸会显示
具体设置细节请参照程序注释
4.导入timeline函数,让地图动起来
主要是将根据上述基本地图代码构造get_year_chart()函数,然后遍历时间列表,将返回结果依次导入timeline函数,就可以让地图动起来了
def get_year_chart(year: int):
map_data = [
[[x["name"], x["value"]] for x in d["data"]] for d in data if d["time"] == year
][0]
min_data, max_data = (
min([d[1][0] for d in map_data]),
max([d[1][0] for d in map_data]),
)
map_chart = (
Map()
.add(
series_name="",
data_pair=map_data,
label_opts=opts.LabelOpts(is_show=True, #是否显示省市名字
color='#EE1289', #名字颜色
font_size=10), #名字大小
is_map_symbol_show=True, #标记被选中的图形
itemstyle_opts={
"normal": {"areaColor": "#473C8B", "borderColor": "#404a59"}, #设置区域和边界颜色
"emphasis": {
"label": {"show": Timeline},
"areaColor": "rgba(255,255,255, 0.5)",
},
},
)
.set_global_opts(
title_opts=opts.TitleOpts(
title="1980年以来中国各省GDP排名变化情况", #设置标题
subtitle="GDP单位:亿元", #设置副标题
pos_left="center", #设置标题左右位置
pos_top="top", #设置标题垂直位置
title_textstyle_opts=opts.TextStyleOpts(
font_size=25, color="rgba(238,0,238, 0.9)" #设置标题字体和颜色
),
),
tooltip_opts=opts.TooltipOpts( #设置文本格式
is_show=True,
formatter=JsCode(
"""function(params) {
if ('value' in params.data) {
return params.data.value[2] + ': ' + params.data.value[0];
}
}"""
),
),
visualmap_opts=opts.VisualMapOpts(
is_calculable=True, #是否显示拖拽用的手柄
dimension=0, #组件映射维度
pos_left="10", #地图左右位置
pos_top="center", #地图上下位置
range_text=["High", "Low"],
range_color=["lightskyblue", "yellow", "orangered"], #左侧视觉映射图形颜色
textstyle_opts=opts.TextStyleOpts(color="#FFAEB9"), #左侧视觉映射文本颜色
min_=min_data,
max_=max_data,
),
)
)
return map_chart
time_list = [1980, 2000, 2005, 2010, 2015]
timeline = Timeline(
init_opts=opts.InitOpts(theme=ThemeType.LIGHT)
)
for y in time_list:
m = get_year_chart(year=y)
timeline.add(m, time_point=str(y))
timeline.add_schema(
orient="vertical",
is_auto_play=True,
is_inverse=True,
play_interval=1000,
pos_left="null",
pos_right="5",
pos_top="20",
pos_bottom="20",
width="50",
label_opts=opts.LabelOpts(is_show=True, color="#fff"),
)
timeline.render_notebook()
通过这个动态地图,可以看出,自改革开放以来,我国的经济重点从东北逐渐往东南沿海发展。
-完-
转载请注明:XAMPP中文组官网 » python代码编程之绘制动态地图