简介:
在数据可视化项目中,地图的展示也是经常用到的展示项之一。某些项目,地图展示效果甚至整个项目中最关键的部分,直接决定了产品质量的优略。
使用pyecharts中的Map类,可以很容易创建一个地图。
1. 例子1:使用Map创建一个中国地图:
# -*- coding: utf-8 -*-
from pyecharts.faker import Faker
from pyecharts import options as opts
from pyecharts.charts import Map
customMap = (
Map().add("商家A",
[list(z) for z in zip(Faker.provinces, Faker.values())], #数据
"china" #地图
)
.set_global_opts( #全局项
title_opts=opts.TitleOpts( #标题项
title="中国地图" #标题名称
)
)
)
customMap.render("map_test.html") # 生成名为map_test的本地html文件
运行结果:
2. Map类简介:
Map类的定义:
class Map(
# 初始化配置项,参考 `global_options.InitOpts`
init_opts: opts.InitOpts = opts.InitOpts()
)
参数说明:
def add(
# 系列名称,用于 tooltip 的显示,legend 的图例筛选。
series_name: str,
# 数据项 (坐标点名称,坐标点值)
data_pair: types.Sequence[types.Union[types.Sequence, opts.MapItem, dict]],
# 地图类型,具体参考 pyecharts.datasets.map_filenames.json 文件
maptype: str = "china",
# 是否选中图例
is_selected: bool = True,
# 是否开启鼠标缩放和平移漫游。
is_roam: bool = True,
# 当前视角的中心点,用经纬度表示
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,
# 当前视角的缩放比例。
zoom: Optional[Numeric] = 1,
# 自定义地区的名称映射
name_map: Optional[dict] = None,
# 标记图形形状
symbol: Optional[str] = None,
# 多个拥有相同地图类型的系列会使用同一个地图展现。
# 如果多个系列都在同一个区域有值,ECharts 会对这些值统计得到一个数据。
# 这个配置项就是用于配置统计的方式,目前有:
# 'sum' 取和。
# 'average' 取平均值。
# 'max' 取最大值。
# 'min' 取最小值。
map_value_calculation: str = "sum",
# 是否显示标记图形
is_map_symbol_show: bool = True,
# 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] = opts.LabelOpts(),
# 提示框组件配置项,参考 `series_options.TooltipOpts`
tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,
# 图元样式配置项,参考 `series_options.ItemStyleOpts`
itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,
# 高亮标签配置项,参考 `series_options.LabelOpts`
emphasis_label_opts: Union[opts.LabelOpts, dict, None] = None,
# 高亮图元样式配置项,参考 `series_options.ItemStyleOpts`
emphasis_itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,
)
3. 例子2:使用Map创建一个世界地图:
from pyecharts import options as opts
from pyecharts.charts import Map
from pyecharts.faker import Faker
c = (
Map()
.add("商家A", [list(z) for z in zip(Faker.country, Faker.values())], "world")
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
title_opts=opts.TitleOpts(title="Map-世界地图"),
visualmap_opts=opts.VisualMapOpts(max_=200),
)
.render("word_map_world.html")
)
运行结果:
在pythong中,地图的创建就这么简单。更多的应用,请读者发挥想象力。
世界那么大,我想去看看。