python.pycharts.Map使用

一、pyecharts安装

pip install pyecharts

1.额外安装的地图文件包

  • 自从 v0.3.2 开始, pyecharts 将不再自带地图 js 文件。如需要用到地图图表(Geo、Map),可自行安装对应的地图文件包。否则在用到这两个包的时候,并能完整的显示地图效果。
  1. 全球国家地图: echarts-countries-pypkg (1.9MB): 世界地图和 213 个国家,包括中国地图
  2. 中国省级地图: echarts-china-provinces-pypkg (730KB):23 个省,5 个自治区
  3. 中国市级地图: echarts-china-cities-pypkg (3.8MB):370 个中国城市
  4. 中国县区级地图: echarts-china-countres-pypkg(4.1MB):2882个中国县区
  5. 中国区域地图:echarts-china-misc-pypkg(148KB): 11个中国区域地图,如:华南、华北
  • Windows下通过已下的pip命令进行安装

pip install echarts-countries-pypkg
pip install echarts-china-provinces-pypkg
pip install echarts-china-cities-pypkg
pip install echarts-china-countres-pypkg
pip install echarts-china-misc-pypkg

  • Linux下通过以下的pip命令进行安装

sudo pip3 install …

官方文档:
具体细节参考:
《Python:数据可视化pyecharts的使用》
《地理图表》
《Pyecharts中Map和Geo的使用笔记》
《python 利用echarts画地图(热力图)(世界地图,省市地图,区县地图)》

2.常用地图类型参数

要用世界地图:maptype=“world”
要用中国地图: maptype=“china”
要用广东地图:maptype=“广东”

上面内容参考:
《如何配置pyecharts的地图类型》

二、pyecharts.Map 使用

  • 当前测试版本 pyecharts V1.8.1
  • 系统提示:pyecharts 所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置

1.1 Map初始化参数: InitOpts:初始化配置项

class pyecharts.charts.Map

class Map(
    # 初始化配置项,参考 `global_options.InitOpts`
    init_opts: opts.InitOpts = opts.InitOpts()
)
  • 用法: Map(opts.InitOpts(参数列表)))
class InitOpts(
    # 图表画布宽度,css 长度单位。
    width: str = "900px",
    # 图表画布高度,css 长度单位。
    height: str = "500px",
    # 图表 ID,图表唯一标识,用于在多图表时区分。
    chart_id: Optional[str] = None,
    # 渲染风格,可选 "canvas", "svg"
    # # 参考 `全局变量` 章节
    renderer: str = RenderType.CANVAS,
    # 网页标题
    page_title: str = "Awesome-pyecharts",
    # 图表主题
    theme: str = "white",
    # 图表背景颜色
    bg_color: Optional[str] = None,
    # 远程 js host,如不设置默认为 https://assets.pyecharts.org/assets/"
    # 参考 `全局变量` 章节
    js_host: str = "",
    # 画图动画初始化配置,参考 `global_options.AnimationOpts`
    animation_opts: Union[AnimationOpts, dict] = AnimationOpts(),
)

1.2 Map.add

func pyecharts.charts.Map.add

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,

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

    # 自定义地区的名称映射
    name_map: Optional[dict] = None,

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

    # 是否显示标记图形
    is_map_symbol_show: bool = True,

    # 标签配置项,参考 `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,
)

1.3 全局配置项

  • 全局配置项可通过 set_global_options 方法设置

1.3.1 TitleOpts:标题配置项

class pyecharts.options.TitleOpts

class TitleOpts(
    # 主标题文本,支持使用 \n 换行。
    title: Optional[str] = None,

    # 主标题跳转 URL 链接
    title_link: Optional[str] = None,

    # 主标题跳转链接方式
    # 默认值是: blank
    # 可选参数: 'self', 'blank'
    # 'self' 当前窗口打开; 'blank' 新窗口打开
    title_target: Optional[str] = None,

    # 副标题文本,支持使用 \n 换行。
    subtitle: Optional[str] = None,

    # 副标题跳转 URL 链接
    subtitle_link: Optional[str] = None,

    # 副标题跳转链接方式
    # 默认值是: blank
    # 可选参数: 'self', 'blank'
    # 'self' 当前窗口打开; 'blank' 新窗口打开
    subtitle_target: Optional[str] = None,

    # title 组件离容器左侧的距离。
    # left 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
    # 也可以是 'left', 'center', 'right'。
    # 如果 left 的值为'left', 'center', 'right',组件会根据相应的位置自动对齐。
    pos_left: Optional[str] = None,

    # title 组件离容器右侧的距离。
    # right 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。
    pos_right: Optional[str] = None,

    # title 组件离容器上侧的距离。
    # top 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
    # 也可以是 'top', 'middle', 'bottom'。
    # 如果 top 的值为'top', 'middle', 'bottom',组件会根据相应的位置自动对齐。
    pos_top: Optional[str] = None,

    # title 组件离容器下侧的距离。
    # bottom 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。
    pos_bottom: Optional[str] = None,

    # 标题内边距,单位px,默认各方向内边距为5,接受数组分别设定上右下左边距。
    # // 设置内边距为 5
    # padding: 5
    # // 设置上下的内边距为 5,左右的内边距为 10
    # padding: [5, 10]
    # // 分别设置四个方向的内边距
    # padding: [
    #     5,  // 上
    #     10, // 右
    #     5,  // 下
    #     10, // 左
    # ]
    padding: Union[Sequence, Numeric] = 5,

    # 主副标题之间的间距。
    item_gap: Numeric = 10,

    # 主标题字体样式配置项,参考 `series_options.TextStyleOpts`
    title_textstyle_opts: Union[TextStyleOpts, dict, None] = None,

    # 副标题字体样式配置项,参考 `series_options.TextStyleOpts`
    subtitle_textstyle_opts: Union[TextStyleOpts, dict, None] = None,
)

1.3.2 visualmap_opts:视觉映射配置项

class pyecharts.options.VisualMapOpts

class VisualMapOpts(
    # 是否显示视觉映射配置
    is_show: bool = True,

    # 映射过渡类型,可选,"color", "size"
    type_: str = "color",

    # 指定 visualMapPiecewise 组件的最小值。
    min_: Union[int, float] = 0,

    # 指定 visualMapPiecewise 组件的最大值。
    max_: Union[int, float] = 100,

    # 两端的文本,如['High', 'Low']。
    range_text: Union[list, tuple] = None,

    # visualMap 组件过渡颜色
    range_color: Union[Sequence[str]] = None,

    # visualMap 组件过渡 symbol 大小
    range_size: Union[Sequence[int]] = None,

    # visualMap 图元以及其附属物(如文字标签)的透明度。
    range_opacity: Optional[Numeric] = None,

    # 如何放置 visualMap 组件,水平('horizontal')或者竖直('vertical')。
    orient: str = "vertical",

    # visualMap 组件离容器左侧的距离。
    # left 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
    # 也可以是 'left', 'center', 'right'。
    # 如果 left 的值为'left', 'center', 'right',组件会根据相应的位置自动对齐。
    pos_left: Optional[str] = None,

    # visualMap 组件离容器右侧的距离。
    # right 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。
    pos_right: Optional[str] = None,

    # visualMap 组件离容器上侧的距离。
    # top 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
    # 也可以是 'top', 'middle', 'bottom'。
    # 如果 top 的值为'top', 'middle', 'bottom',组件会根据相应的位置自动对齐。
    pos_top: Optional[str] = None,

    # visualMap 组件离容器下侧的距离。
    # bottom 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。
    pos_bottom: Optional[str] = None,

    # 对于连续型数据,自动平均切分成几段。默认为5段。连续数据的范围需要 max 和 min 来指定
    split_number: int = 5,

    # 指定取哪个系列的数据,默认取所有系列。
    series_index: Union[Numeric, Sequence, None] = None,

    # 组件映射维度
    dimension: Optional[Numeric] = None,

    # 是否显示拖拽用的手柄(手柄能拖拽调整选中范围)。
    is_calculable: bool = True,

    # 是否为分段型
    is_piecewise: bool = False,

    # 是否反转 visualMap 组件
    is_inverse: bool = False,

    # 数据展示的小数精度。
    # 连续型数据平均分段,精度根据数据自动适应。
    # 连续型数据自定义分段或离散数据根据类别分段模式,精度默认为0(没有小数)。
    precision: Optional[int] = None,

    # 自定义的每一段的范围,以及每一段的文字,以及每一段的特别的样式。例如:
    # pieces: [
    #   {"min": 1500}, // 不指定 max,表示 max 为无限大(Infinity)。
    #   {"min": 900, "max": 1500},
    #   {"min": 310, "max": 1000},
    #   {"min": 200, "max": 300},
    #   {"min": 10, "max": 200, "label": '10 到 200(自定义label)'},
    #   {"value": 123, "label": '123(自定义特殊颜色)', "color": 'grey'}, //表示 value 等于 123 的情况
    #   {"max": 5}     // 不指定 min,表示 min 为无限大(-Infinity)。
    # ]
    pieces: Optional[Sequence] = None,

    # 定义 在选中范围外 的视觉元素。(用户可以和 visualMap 组件交互,用鼠标或触摸选择范围)
    #  可选的视觉元素有:
    #  symbol: 图元的图形类别。
    #  symbolSize: 图元的大小。
    #  color: 图元的颜色。
    #  colorAlpha: 图元的颜色的透明度。
    #  opacity: 图元以及其附属物(如文字标签)的透明度。
    #  colorLightness: 颜色的明暗度,参见 HSL。
    #  colorSaturation: 颜色的饱和度,参见 HSL。
    #  colorHue: 颜色的色调,参见 HSL。
    out_of_range: Optional[Sequence] = None,

    # 图形的宽度,即长条的宽度。
    item_width: int = 0,

    # 图形的高度,即长条的高度。
    item_height: int = 0,

    # visualMap 组件的背景色。
    background_color: Optional[str] = None,

    # visualMap 组件的边框颜色。
    border_color: Optional[str] = None,

    # visualMap 边框线宽,单位px。
    border_width: int = 0,

    # 文字样式配置项,参考 `series_options.TextStyleOpts`
    textstyle_opts: Union[TextStyleOpts, dict, None] = None,
)

1.4 set_series_opts:设置系列参数

1.4.1 label_opts : 标签配置项

label_opts=opts.LabelOpts(is_show=False)
class pyecharts.options.LabelOpts

class LabelOpts(
    # 是否显示标签。
    is_show: bool = True,

    # 标签的位置。可选
    # 'top','left','right','bottom','inside','insideLeft','insideRight'
    # 'insideTop','insideBottom', 'insideTopLeft','insideBottomLeft'
    # 'insideTopRight','insideBottomRight'
    position: Union[str, Sequence] = "top",

    # 文字的颜色。
    # 如果设置为 'auto',则为视觉映射得到的颜色,如系列色。
    color: Optional[str] = None,

    # 距离图形元素的距离。当 position 为字符描述值(如 'top'、'insideRight')时候有效。
    distance: Union[Numeric, Sequence, None] = None,

    # 文字的字体大小
    font_size: Numeric = 12,

    # 文字字体的风格,可选:
    # 'normal','italic','oblique'
    font_style: Optional[str] = None,

    # 文字字体的粗细,可选:
    # 'normal','bold','bolder','lighter'
    font_weight: Optional[str] = None,

    # 文字的字体系列
    # 还可以是 'serif' , 'monospace', 'Arial', 'Courier New', 'Microsoft YaHei', ...
    font_family: Optional[str] = None,

    # 标签旋转。从 -90 度到 90 度。正值是逆时针。
    rotate: Optional[Numeric] = None,

    # 刻度标签与轴线之间的距离。
    margin: Optional[Numeric] = 8,

    # 坐标轴刻度标签的显示间隔,在类目轴中有效。
    # 默认会采用标签不重叠的策略间隔显示标签。
    # 可以设置成 0 强制显示所有标签。
    # 如果设置为 1,表示『隔一个标签显示一个标签』,如果值为 2,表示隔两个标签显示一个标签,以此类推。
    # 可以用数值表示间隔的数据,也可以通过回调函数控制。回调函数格式如下:
    # (index:number, value: string) => boolean
    # 第一个参数是类目的 index,第二个值是类目名称,如果跳过则返回 false。
    interval: Union[Numeric, str, None]= None,

    # 文字水平对齐方式,默认自动。可选:
    # 'left','center','right'
    horizontal_align: Optional[str] = None,

    # 文字垂直对齐方式,默认自动。可选:
    # 'top','middle','bottom'
    vertical_align: Optional[str] = None,

    # 标签内容格式器,支持字符串模板和回调函数两种形式,字符串模板与回调函数返回的字符串均支持用 \n 换行。
    # 模板变量有 {a}, {b},{c},{d},{e},分别表示系列名,数据名,数据值等。 
    # 在 trigger 为 'axis' 的时候,会有多个系列的数据,此时可以通过 {a0}, {a1}, {a2} 这种后面加索引的方式表示系列的索引。 
    # 不同图表类型下的 {a},{b},{c},{d} 含义不一样。 其中变量{a}, {b}, {c}, {d}在不同图表类型下代表数据含义为:

    # 折线(区域)图、柱状(条形)图、K线图 : {a}(系列名称),{b}(类目值),{c}(数值), {d}(无)
    # 散点图(气泡)图 : {a}(系列名称),{b}(数据名称),{c}(数值数组), {d}(无)
    # 地图 : {a}(系列名称),{b}(区域名称),{c}(合并数值), {d}(无)
    # 饼图、仪表盘、漏斗图: {a}(系列名称),{b}(数据项名称),{c}(数值), {d}(百分比)
    # 示例:formatter: '{b}: {@score}'
    # 
    # 回调函数,回调函数格式:
    # (params: Object|Array) => string
    # 参数 params 是 formatter 需要的单个数据集。格式如下:
    # {
     
    #    componentType: 'series',
    #    // 系列类型
    #    seriesType: string,
    #    // 系列在传入的 option.series 中的 index
    #    seriesIndex: number,
    #    // 系列名称
    #    seriesName: string,
    #    // 数据名,类目名
    #    name: string,
    #    // 数据在传入的 data 数组中的 index
    #    dataIndex: number,
    #    // 传入的原始数据项
    #    data: Object,
    #    // 传入的数据值
    #    value: number|Array,
    #    // 数据图形的颜色
    #    color: string,
    # }
    formatter: Optional[str] = None,

    # 在 rich 里面,可以自定义富文本样式。利用富文本样式,可以在标签中做出非常丰富的效果
    # 具体配置可以参考一下 https://www.echartsjs.com/tutorial.html#%E5%AF%8C%E6%96%87%E6%9C%AC%E6%A0%87%E7%AD%BE
    rich: Optional[dict] = None,
)

三、测试案例

  • 以下内容于2020.8.16测试通过:pyecharts V1.8.1 pycharm win7

1.1 全国地图数据展示

from pyecharts.charts import Map
from pyecharts import options as opts

value = [115.4,121.6,122,116,123.3,110.4,118.4,116.8,114.3,
         113.2,111.8,116.8,113.4,113,121.3,118.7,119,117.6,113.8,
         115.1,114.1,115.2,112.6,114.8,120.2,118.2,119.8,114.7,115.4,
         114.6,112.7]
attr = ['甘肃','广东', '广西','贵州','海南',
        '河南','湖北', '湖南','宁夏','青海',
        '陕西','四川', '西藏','新疆','云南',
        '重庆','北京', '天津','河北','山西','内蒙古',
        '辽宁','吉林', '黑龙江','上海','江苏','浙江','安徽','福建'
        ,'江西','山东']
sequence = list(zip(attr,value))

def map_visualmap(sequence, year) -> Map:
    c = (
        Map(opts.InitOpts(width='1200px',height='600px'))               #  opts.InitOpts() 设置初始参数:width=画布宽,height=画布高
            .add(series_name=year, data_pair=sequence, maptype="china" )       # 系列名称(显示在中间的名称 )、数据 、地图类型
            .set_global_opts(
            title_opts=opts.TitleOpts(title="地图"),
            visualmap_opts=opts.VisualMapOpts(max_=130, min_=95),
        )
    )
    return c


map = map_visualmap(sequence, '1993')
map.render(path='./test.html')

python.pycharts.Map使用_第1张图片

1.2福建省内地图展示

from pyecharts.charts import Map
from pyecharts import options as opts
def map_visualmap(sequence, year) -> Map:
    c = (
        Map()
            .add(year, sequence, "福建",is_map_symbol_show=False )        # 系列名称(显示在中间的名称 )、数据 、地图类型,不显示标记点
            .set_global_opts(
            title_opts=opts.TitleOpts(title="地图"),
            #             visualmap_opts=opts.VisualMapOpts(max_=101,min_=16),
            visualmap_opts=opts.VisualMapOpts(max_=101,min_=16, range_color=["lightskyblue", "yellow", "orangered"],is_piecewise=True),  # 范围 最大值 、最小值 、组件过渡颜色 、 是否为分段型
        )
        .set_series_opts(label_opts=opts.LabelOpts(is_show=False))      # 不显示系列名称
    )
    return c


map = map_visualmap(sequence, '2020')
map.render(path='./test2.html')

python.pycharts.Map使用_第2张图片
set_series_opts(label_opts=opts.LabelOpts(is_show=True))
python.pycharts.Map使用_第3张图片

1.3 广东省内地图展示

from pyecharts.charts import Map
from pyecharts import options as opts
from pyecharts.faker import Faker

data_hubei=[list(z) for z in zip(Faker.guangdong_city, Faker.values())]
print(data_hubei)

c = (
    Map()
    .add("商家A", data_hubei, "广东")
    .set_global_opts(
        title_opts=opts.TitleOpts(title="Map-广东地图"), visualmap_opts=opts.VisualMapOpts()
    )
    .render("map_guandong.html")
)

python.pycharts.Map使用_第4张图片

以上内容参考以下资料:
1、地理图表
2、pyecharts-gallery

你可能感兴趣的:(Python学习笔记,python,可视化)