最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

python代码编程之绘制动态地图

XAMPP案例 admin 666浏览 0评论

偶然发现动态地图很有意思,可以根据时间的变化清晰的展现出某件事情的发展规律,今天以我国GDP排名情况为例,教大家用pyecharts画出动态地图

zzzzzy40

主要用到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()

zzzzzy000000033

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()

zzzzzy040

通过这个动态地图,可以看出,自改革开放以来,我国的经济重点从东北逐渐往东南沿海发展。

-完-

转载请注明:XAMPP中文组官网 » python代码编程之绘制动态地图

您必须 登录 才能发表评论!