Pyecharts 地图

Pyecharts 地图语法

在 Pyecharts 中,我们可以使用 Map 这个模块来绘制一个地图。地图的主要作用是:展示地区对应的数据。

语法:

map = Map()
map.add(series_name, data_pair, maptype)

说明:

对于地图来说,它也是使用 add() 方法。参数 series_name 是一个必选参数,用于定义系列的名字。参数 data_pair 也是一个必选参数,用于定义地图的数据。

参数 maptype 用于定义地图的类型,常用的取值如下表所示。

参数 maptype 的取值
取值 说明
world 世界地图
china 中国地图
广东 广东地图(可换成其他省)
广州市 广州地图(可换成其他市)

对于 maptype 的取值,我们一定要严格按照下面这 3 个规范才行。

  • 如果想要使用中国地图,我们必须写成 maptype='china',而不能写成 maptype='China' 或 maptype='中国' 等。
  • 如果想要使用广东地图,我们必须写成 maptype='广东',而不能写成 maptype='广东省' 或 maptype='Guangdong' 等。
  • 如果想要使用广州地图,我们必须写成 maptype='广州市',而不能写成 maptype='广州' 或 maptype='guangzhou' 等。

示例 1:Pyecharts 绘制中国地图

import numpy as np
import pandas as pd
from pyecharts.charts import Map

# 数据
data = [
    ['北京市', 520],
    ['上海市', 560],
    ['广东省', 720],
    ['江苏省', 600],
    ['浙江省', 650]
]
df = pd.DataFrame(data, columns=['省份', '销量'])
df_array = np.array(df)                # 转换为数组
df_list = df_array.tolist()            # 转换为列表

# 绘图
map = Map()
map.add(series_name='各省份销量统计', data_pair=df_list, maptype='china')

# 渲染
map.render()

运行生成的 render.html,浏览器效果如下图所示。

pyecharts绘制中国地图

分析:

maptype='china' 表示使用的是中国地图。对于参数 data_pair 来说,它的取值要求是一个二维列表,下面 2 种形式都是可行的。

# 方式1
[
    ['北京市', 520],
    ['上海市', 560],
    ['广东省', 720],
    ['江苏省', 600],
    ['浙江省', 650]
]

# 方式2
[
    ('北京市', 520),
    ('上海市', 560),
    ('广东省', 720),
    ('江苏省', 600),
    ('浙江省', 650)
]

需要注意的是,省份或地区的名字要写对。比如把 “广东省” 写成 “厂东省”,此时就会有问题。并且省份要加上 “省”,比如 “广东省” 不能写成 “广东”。而直辖市要加上 “市”,比如 “北京市” 不能写成 “北京”。否则可能会无法正常显示。

此外,我们并不要求每一个省份都要有对应的数据。哪些省份有数据,地图就会用一个小红点标记出来。如果一个省份没有小红点,那么就表示该省份没有数据。

当我们把鼠标移到有数据的地区,比如移到 “广东” 这个地方,此时就会高亮该地区,并且显示对应的数据,如下图所示。

pyecharts地图的提示框

示例 2:省级地图

import numpy as np
import pandas as pd
from pyecharts.charts import Map

# 数据
data = [
    ['广州市', 450],
    ['深圳市', 420],
    ['东莞市', 360],
    ['佛山市', 380],
    ['珠海市', 320]
]
df = pd.DataFrame(data, columns=['城市', '销量'])
df_array = np.array(df)                # 转换为数组
df_list = df_array.tolist()            # 转换为列表

# 绘图
map = Map()
map.add(series_name='各城市销量统计', data_pair=df_list, maptype='广东')

# 渲染
map.render()

运行生成的 render.html,浏览器效果如下图所示。

pyecharts绘制广东地图

分析:

对于这个例子来说,数据部分的城市名后面必须要有一个 “市”,否则就无法正确对应显示。

# 正确
[
    ['广州市', 450],
    ['深圳市', 420],
    ['东莞市', 360],
    ['佛山市', 380],
    ['珠海市', 320]
]

# 错误
[
    ['广州', 450],
    ['深圳', 420],
    ['东莞', 360],
    ['佛山', 380],
    ['珠海', 320]
]

如果你的 DataFrame 中的城市名本身是不包含 “市” 字的,我们需要借助 Pandas 提供的方法来处理成正确的格式才行。总而言之,在实际开发中,如果你发现地图中的数据并没有正确显示,很可能就是数据中的地区名和地图中的地区名没有正确对应。

示例 3:世界地图

import numpy as np
import pandas as pd
from pyecharts.charts import Map
import pyecharts.options as opts

# 数据
data = [
    ['United States', 20.95],
    ['China', 15.58],
    ['Japan', 4.95],
    ['Germany', 3.78],
    ['United Kingdom', 2.71],
    ['India', 2.62],
    ['France', 2.60],
    ['Italy', 1.85],
    ['Canada', 1.64],
    ['Korea', 1.63]
]
df = pd.DataFrame(data, columns=['国家', 'GDP'])
df_array = np.array(df)                     # 转换为数组
df_list = df_array.tolist()                 # 转换为列表

# 绘图
map = Map()
map.add(series_name='各国GDP', data_pair=df_list, maptype='world')

# 渲染
map.render()

运行生成的 render.html,浏览器效果如下图所示。

pyecharts绘制世界地图

分析:

默认情况下,地图会把所有国家或地区的名字全部显示出来。至于如何解决这个问题,我们后面会详细介绍。

Pyecharts 地图样式

在 Pyecharts 中,对于地图的自定义样式,主要包括 2 个方面:① 隐藏地名;② 添加区分。

1. 隐藏地名

在 Pyecharts 中,我们可以使用 set_series_opts() 方法结合 label_opts 参数来隐藏地名。隐藏地名,其实也就是把 “标签(label)” 隐藏起来。

示例 4:Pyecharts 地图隐藏地名

import numpy as np
import pandas as pd
from pyecharts.charts import Map
import pyecharts.options as opts

# 数据
data = [
    ['北京市', 520],
    ['上海市', 560],
    ['广东省', 720],
    ['江苏省', 600],
    ['浙江省', 650]
]
df = pd.DataFrame(data, columns=['省份', '销量'])
df_array = np.array(df)                # 转换为数组
df_list = df_array.tolist()            # 转换为列表

# 绘图
map = Map()
map.add(series_name='各省份销量统计', data_pair=df_list, maptype='china')
# 隐藏地名(标签)
map.set_series_opts(label_opts=opts.LabelOpts(is_show=False))

# 渲染
map.render()

运行生成的 render.html,浏览器效果如下图所示。

pyecharts地图隐藏地名

分析:

is_show=False 表示把所有标签(即地名)隐藏起来。在实际开发中,如果地图中的标签过多,反而会影响用户体验。虽然标签是隐藏了,不过我们将鼠标移到有数据的区域时,还是会提示该区域的数据,如下图所示。

pyecharts地图显示数据

2. 添加区分

在 Pyecharts 中,我们可以使用 set_global_opts() 方法结合 visualmap_opts 参数来为地图添加颜色区分。

示例 5:Pyecharts 地图添加区分

import numpy as np
import pandas as pd
from pyecharts.charts import Map
import pyecharts.options as opts

# 数据
data = [
    ['北京市', 520],
    ['上海市', 560],
    ['广东省', 720],
    ['江苏省', 600],
    ['浙江省', 650]
]
df = pd.DataFrame(data, columns=['省份', '销量'])
df_array = np.array(df)                     # 转换为数组
df_list = df_array.tolist()                 # 转换为列表
sale_min = int(df['销量'].min())            # 获取最小值
sale_max = int(df['销量'].max())            # 获取最大值

# 绘图
map = Map()
map.add(series_name='各省份销量统计', data_pair=df_list, maptype='china')
# 添加颜色区分
map.set_global_opts(visualmap_opts=opts.VisualMapOpts(
    type_='color',
    min_=sale_min,
    max_=sale_max,
    pos_bottom=50,
    pos_right=0
))

# 渲染
map.render()

运行生成的 render.html,浏览器效果如下图所示。

pyecharts地图添加区分

分析:

如果你觉得默认的颜色不好看,也可以使用 range_color 这个参数来自定义颜色。修改后的代码如下,再次运行后的效果如下图所示。

map.set_global_opts(visualmap_opts=opts.VisualMapOpts(
    type_='color',
    min_=sale_min,
    max_=sale_max,
    pos_bottom=50,
    pos_right=0,
    range_color=['lightskyblue', 'yellow', 'orangered']
))

pyecharts地图自定义颜色

示例 6:综合实例(世界地图)

import numpy as np
import pandas as pd
from pyecharts.charts import Map
import pyecharts.options as opts

# 数据
data = [
    ['United States', 20.95],
    ['China', 15.58],
    ['Japan', 4.95],
    ['Germany', 3.78],
    ['United Kingdom', 2.71],
    ['India', 2.62],
    ['France', 2.60],
    ['Italy', 1.85],
    ['Canada', 1.64],
    ['Korea', 1.63]
]
df = pd.DataFrame(data, columns=['国家', 'GDP'])
df_array = np.array(df)                     # 转换为数组
df_list = df_array.tolist()                 # 转换为列表
gdp_min = int(df['GDP'].min())              # 获取最小值
gdp_max = int(df['GDP'].max())              # 获取最大值

# 绘图
map = Map()
map.add(series_name='各国GDP', data_pair=df_list, maptype='world')
# 不显示label
map.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
# 添加颜色区分
map.set_global_opts(visualmap_opts=opts.VisualMapOpts(
    type_='color',
    min_=gdp_min,
    max_=gdp_max,
    pos_bottom=50,
    pos_right=0,
    range_color=['lightskyblue', 'yellow', 'orangered']
))

# 渲染
map.render()

运行生成的 render.html,浏览器效果如下图所示。

pyecharts地图综合案例

上一篇: Pyecharts 词云图

下一篇: Pyecharts 树图

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号