pyecharts从入门到精通-地图专题GEO-世界地图和中国城市地图

参考

官方文档:https://pyecharts.org/#/zh-cn/quickstart
Python使用Pyecharts画Geo地图,如何显示具体地点名称
pyecharts世界地图用:国家中英文对照表.xlsx
Map中的地理坐标问题

安装与查看pyecharts

安装pyecharts

pip install pyecharts==2.0.3
# Successfully installed prettytable-3.7.0 pyecharts-2.0.3 simplejson-3.19.1

查看版本

import pyecharts
print(pyecharts.__version__) 
# 2.0.3

地图实现-Geo

pyecharts的地图实现包括:

Geo:地理坐标系
Map:地图
BMap:百度地图

完成Geo地理坐标系实现。

0、导入相关模块
1、首先是实例化对象:可传入图表宽度、名称、背景颜色
2、add_schema() :传入要显示的区域名称、是否显示下辖区的名称、图表颜色、边界线颜色
3、add(): 传入图例名称、数据(二级列表)、图类型(ChartType.EFFECT_SCATTER动态散点
图,ChartType.HEATMAP热力图,scatter, effectScatter, heatmap, lines)
4、set_series_opts() :是否显示每个区域的数据大小
5、set_global_opts() : 设置图标标题
6、render_notebook() : 在notebook中渲染显示图表

案例演示

from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.faker import Faker
from pyecharts.globals import ChartType

c = (
    Geo()
    .add_schema(maptype="广东")
    .add(
        "geo",
        [list(z) for z in zip(Faker.guangdong_city, Faker.values())],
        type_=ChartType.HEATMAP,
    )
    .add(
        "geo",
        [list(z) for z in zip(Faker.provinces, Faker.values())],
        type_=ChartType.EFFECT_SCATTER,
    )
    .add(
        "",
        [("汕头市", 55), ("汕尾市", 66), ("广州市", 77), ("惠州市", 88)],
        type_=ChartType.EFFECT_SCATTER,
        color="white",
    )
    .add(
        "geo",
        [("汕头市", "汕尾市"), ("广州市", "惠州市"), ("汕头市", "广州市"), ("广州市", "肇庆市")],
        type_=ChartType.LINES,
        effect_opts=opts.EffectOpts(
            symbol=SymbolType.ARROW, symbol_size=6, color="blue"
        ),
        linestyle_opts=opts.LineStyleOpts(curve=0.2),
    )
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    .set_global_opts(
        visualmap_opts=opts.VisualMapOpts(), title_opts=opts.TitleOpts(title="Geo-广东地图")
    )

)
c.render_notebook()

在这里插入图片描述

拓展-pyecharts中GEO源码

class pyecharts.charts.Geo

class Geo(
    # 初始化配置项,参考 `global_options.InitOpts`
    init_opts: opts.InitOpts = opts.InitOpts()

    # 是否忽略不存在的坐标,默认值为 False,即不忽略
    is_ignore_nonexistent_coord: bool = False
)

func pyecharts.charts.Geo.add_schema

def add_schema(
    # 地图类型,具体参考 pyecharts.datasets.map_filenames.json 文件
    maptype: str = "china",

    # 是否开启鼠标缩放和平移漫游。
    is_roam: bool = True,

    # 当前视角的缩放比例。默认为 1
    zoom: Optional[Numeric] = None,

    # 当前视角的中心点,用经纬度表示。例如:center: [115.97, 29.71]
    center: Optional[Sequence] = None,

    # 参数用于 scale 地图的长宽比。
    aspect_scale: types.Numeric = 0.75,

    # 二维数组,定义定位的左上角以及右下角分别所对应的经纬度。
    bounding_coords: types.Optional[types.Sequence[types.Numeric]] = None,

    # 最小的缩放值。
    min_scale_limit: types.Optional[types.Numeric] = None,

    # 最大的缩放值。
    max_scale_limit: types.Optional[types.Numeric] = None,

    # 默认是 'name',针对 GeoJSON 要素的自定义属性名称,作为主键用于关联数据点和 GeoJSON 地理要素。
    name_property: str = "name",

    # 选中模式,表示是否支持多个选中,默认关闭,支持布尔值和字符串。
    # 字符串取值可选'single'表示单选,或者'multiple'表示多选。
    selected_mode: types.Union[bool, str] = False,

    # pyecharts 暂时没有提供 left/top/right/bottom 的配置
    # layoutCenter 和 layoutSize 提供了除了 left/right/top/bottom/width/height 之外的布局手段。
    # 在使用 left/right/top/bottom/width/height 的时候
    # 可能很难在保持地图高宽比的情况下把地图放在某个盒形区域的正中间,并且保证不超出盒形的范围。
    # 此时可以通过 layoutCenter 属性定义地图中心在屏幕中的位置,layoutSize 定义地图的大小。
    # 如下示例
    # layoutCenter: ['30%', '30%'],
    # // 如果宽高比大于 1 则宽度为 100,如果小于 1 则高度为 100,保证了不超过 100x100 的区域
    # layoutSize: 100
    layout_center: types.Optional[types.Sequence[str]] = None,

    # 地图的大小,见 layoutCenter。支持相对于屏幕宽高的百分比或者绝对的像素大小。
    layout_size: types.Union[str, types.Numeric] = None,

    # # 标签配置项,参考 `series_options.LabelOpts`
    label_opts: Union[opts.LabelOpts, dict, None] = None,

    # 地图区域的多边形 图形样式。
    itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] =None,

    # 高亮状态下的多边形样式
    emphasis_itemstyle_opts: Union[opts.ItemStyleOpts, dict,None] = None,

    # 高亮状态下的标签样式。
    emphasis_label_opts: Union[opts.LabelOpts, dict, None] =None,

    # 在地图中对特定的区域配置样式。具体配置参考 `charts_options.GeoRegionsOpts`
    regions_opts: types.Union[types.Sequence[types.GeoRegions], types.Sequence[dict]] = None,
):

func pyecharts.charts.Geo.add

def add(
    # 系列名称,用于 tooltip 的显示,legend 的图例筛选。
    series_name: str,

    # 数据项 (坐标点名称,坐标点值)
    data_pair: Sequence,

    # Geo 图类型,有 scatter, effectScatter, heatmap, lines 4 种,建议使用
    # from pyecharts.globals import GeoType
    # GeoType.GeoType.EFFECT_SCATTER,GeoType.HEATMAP,GeoType.LINES
    type_: str = "scatter",

    # 是否选中图例
    is_selected: bool = True,

    # 标记图形形状
    symbol: Optional[str] = None,

    # 标记的大小
    symbol_size: Numeric = 12,

    # 每个点的大小,在地理坐标系(coordinateSystem: 'geo')上有效。
    blur_size: types.Numeric = 20,

    # 每个点模糊的大小,在地理坐标系(coordinateSystem: 'geo')上有效。
    point_size: types.Numeric = 20,

    # 系列 label 颜色
    color: Optional[str] = None,

    # 是否是多段线,在画 lines 图情况下
    is_polyline: bool = False,

    # 是否启用大规模线图的优化,在数据图形特别多的时候(>=5k)可以开启
    is_large: bool = False,

    # 特效尾迹的长度。取从 0 到 1 的值,数值越大尾迹越长。默认值 0.2
    trail_length: Numeric = 0.2,

    # 开启绘制优化的阈值。
    large_threshold: Numeric = 2000,

    # 配置该系列每一帧渲染的图形数
    progressive: types.Numeric = 400,

    # 启用渐进式渲染的图形数量阈值,在单个系列的图形数量超过该阈值时启用渐进式渲染。
    progressive_threshold: types.Numeric = 3000,

    # 标签配置项,参考 `series_options.LabelOpts`
    label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),

    # 涟漪特效配置项,参考 `series_options.EffectOpts`
    effect_opts: Union[opts.EffectOpts, dict] = opts.EffectOpts(),

    # 线样式配置项,参考 `series_options.LineStyleOpts`
    linestyle_opts: Union[opts.LineStyleOpts, dict] = opts.LineStyleOpts(),

    # 提示框组件配置项,参考 `series_options.TooltipOpts`
    tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,

    # 图元样式配置项,参考 `series_options.ItemStyleOpts`
    itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,

    # 这个配置相对非常复杂(参照地址: https://www.echartsjs.com/zh/option.html#series-custom.renderItem)
    render_item: types.JsCode = None,

    # 这个配置相对非常复杂(参照地址: https://www.echartsjs.com/zh/option.html#series-custom.encode)
    encode: types.Union[types.JsCode, dict] = None,
)

func pyecharts.charts.Geo.add_coordinate 新增一个坐标点

def add_coordinate(
    # 坐标地点名称
    name: str,

    # 经度
    longitude: Numeric,

    # 纬度
    latitude: Numeric,
)

func pyecharts.charts.Geo.add_coordinate_json
以 JOSN 文件格式新增多个坐标点

def add_coordinate_json(
    # json 文件格式的坐标数据
    # 格式如下
    # {
    #   "阿城": [126.58, 45.32],
    #   "阿克苏": [80.19, 41.09]
    # }
  ],
    json_file: str
)

func pyecharts.charts.Geo.get_coordinate
查询指定地点的坐标

def get_coordinate(
    # 地点名称
    name: str
) -> Sequence

Geo 图的坐标引用自 pyecharts.datasets.COORDINATES,COORDINATES 是一个支持模糊匹配的字典类。可设置匹配的阈值。

from pyecharts.datasets import COORDINATES
# cutoff 为匹配阈值,阈值越高相似性越高,1 为完全相同。默认为 0.6
COORDINATES.cutoff = 0.75

func pyecharts.options.GeoRegionsOpts

class GeoRegionsOpts(
    # 地图区域的名称,例如 '广东','浙江'。
    name: Optional[str] = None,

    # 该区域是否选中。
    is_selected: bool = False,

    # 该区域的多边形样式设置。
    itemstyle_opts: Union[ItemStyleOpts, dict, None] = None,

    # 图形上的文本标签,可用于说明图形的一些数据信息,比如值,名称等。
    label_opts: Union[LabelOpts, dict, None] = None,

    # 高亮状态的样式设置。
    emphasis_itemstyle_opts: Union[ItemStyleOpts, dict, None] = None,

    # 高亮状态的标签设置。
    emphasis_label_opts: Union[LabelOpts, dict, None] = None,

    # 选中状态的样式设置。
    select_itemstyle_opts: Union[ItemStyleOpts, dict, None] = None,

    # 选中状态的标签设置。
    select_label_opts: Union[LabelOpts, dict, None] = None,

    # 淡出状态的样式设置。
    blur_itemstyle_opts: Union[ItemStyleOpts, dict, None] = None,

    # 淡出状态的标签设置。
    blur_label_opts: Union[LabelOpts, dict, None] = None,

    # 本 region 中特定的 tooltip 设定。
    tooltip_opts: Union[TooltipOpts, dict, None] = None,

    # 图形是否不响应和触发鼠标事件,默认为 false,即响应和触发鼠标事件。
    is_silent: bool = False,
)

在这里插入图片描述

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,以下是一个关于2019年粤港澳地区GDP情况的可视化地图案例,同样使用了pyecharts地理图表,并且实现了动态演示数据的效果: ```python import pandas as pd import numpy as np import random from pyecharts import options as opts from pyecharts.charts import Map from pyecharts.faker import Faker from pyecharts.globals import ThemeType from pyecharts.commons.utils import JsCode # 读取数据 data=pd.read_excel('gdp_guangdong_hk_macau.xlsx') # 绘制地图 map=Map() map.add("2019年粤港澳地区GDP",list(zip(data['地区'],data['GDP'])), "world",is_map_symbol_show=False) map.set_global_opts(title_opts=opts.TitleOpts(title="2019年粤港澳地区GDP情况", subtitle="数据来源:国家统计局"), visualmap_opts=opts.VisualMapOpts(max_=1000000)) # 实现动态效果 values=list(data['GDP']) gdp_max=max(values) gdp_min=min(values) gdp_range=gdp_max-gdp_min def get_random_values(): return [random.randint(gdp_min,gdp_max) for _ in range(len(data))] def update_map(): map.set_series_opts(label_opts=opts.LabelOpts(is_show=True)) map.set_global_opts(visualmap_opts=opts.VisualMapOpts(max_=gdp_range), title_opts=opts.TitleOpts(title="2019年粤港澳地区GDP情况", subtitle="数据来源:国家统计局"), graphic_text_opts=opts.GraphicTextOpts( graphic_item=opts.GraphicItem( left="center", top="center" ), graphic_textstyle_opts=opts.GraphicTextStyleOpts( text="数据更新......", font="bold 20px Microsoft YaHei", graphic_basicstyle_opts=opts.GraphicBasicStyleOpts( fill="rgba(0,0,0,0.3)" ) ) ) ) data['GDP']=get_random_values() map.set_data_pair(list(zip(data['地区'],data['GDP']))) return map.dump_options_with_quotes() # 执行动态效果 map.add_js_funcs("setInterval(function (){" "option="+update_map()+";" "myChart.setOption(option);" "}, 2000);") map.render("gdp_guangdong_hk_macau.html") ``` 这段代码同样读取一个名为"gdp_guangdong_hk_macau.xlsx"的数据文件,其包含了粤港澳地区的GDP数据。然后使用pyecharts的Map类,将数据绘制在地图上。最后使用add_js_funcs()方法实现了动态效果,每隔2秒钟更新一次数据。 这个案例还使用了pyecharts的Faker类,用来生成一些假数据。如果您的数据是实时更新的,可以将get_random_values()函数替换为从网站或数据库获取数据的代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT从业者张某某

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值