Pyecharts绘制地图 流入地图 热力图

时间:2022-07-23
本文章向大家介绍Pyecharts绘制地图 流入地图 热力图,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

概述

最近在用“智行”时发现一个有意思的东西,该软件会根据用户的行程记录,生成用户的流入流出数据地图。感觉比较有趣就上网查了实现方法。

Pyecharts

Pyecharts 是一个用于生成 Echarts 图表的类库。用 Echarts 生成的图可视化效果很不错,Pyecharts库是用来与 Python 进行对接,方便 Python 直接使用数据生成图。

要实现数据地图功能要安装部分地图扩展。

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

其中

1)全球国家地图(echarts-countries-pypkg):世界地图和 213 个国家,包括中国地图。

2)中国省级地图(echarts-china-provinces-pypkg)。

3)中国市级地图(echarts-china-cities-pypkg):370 个中国城市。

绘制数据流向图

其实没啥内容,就是直接使用,直接上代码,已做注释。

from pyecharts.charts import Geo
from pyecharts import options as opts
from pyecharts.globals import ChartType, SymbolType

geo = Geo()

# 地图类型,世界地图可换为world
geo.add_schema(maptype="china")

# 添加数据点
geo.add("", [("天津", 100), ("拉萨", 100), ("新疆", 100), ("西安", 100), ("合肥", 100), ("北京", 10), ("上海", 20), ("广州", 30),
             ("哈尔滨", 40), ("杭州", 50), ("成都", 60), ("武汉", 70)],
        type_=ChartType.EFFECT_SCATTER)
 
# 添加流向
geo.add("",
        [("合肥", "广州"),
         ("合肥", "新疆"),
         ("合肥", "哈尔滨"),
         ("合肥", "北京"),
         ("合肥", "广州"),
         ("合肥", "拉萨"),
         ("合肥", "天津"),
         ("合肥", "成都"),
         ("合肥", "西安"),
         ("合肥", "杭州"),
         ("合肥", "上海"),
         ("合肥", "武汉")],
        type_=ChartType.LINES,
        effect_opts=opts.EffectOpts(symbol=SymbolType.ARROW, symbol_size=5, color="yellow"),
        linestyle_opts=opts.LineStyleOpts(curve=0.3),
        is_large=True)
        
# 不显示标签
geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))

# 直接在notebook里显示图表
geo.render_notebook()

# 生成html文件,可传入位置参数
geo.render("myMapChart.html")

效果图

绘制热力图

也是直接套代码。

from pyecharts.charts import Geo
from pyecharts import options as opts
from pyecharts.globals import GeoType

geo = Geo()
geo.add_schema(maptype="china")
# 添加数据点
geo.add("", [("天津", 1), ("拉萨", 10), ("新疆", 20), ("西安", 30), ("合肥", 40), ("北京", 50), ("上海", 60), ("广州", 70),
             ("哈尔滨", 80), ("杭州", 90), ("成都", 100), ("武汉", 300)],
        type_=GeoType.EFFECT_SCATTER, symbol_size=20)
# 设置样式
geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
# 自定义分段 color 可以用取色器取色
pieces = [
    {'max': 1, 'label': '0以下', 'color': '#50A3BA'},
    {'min': 1, 'max': 10, 'label': '1-10', 'color': '#3700A4'},
    {'min': 10, 'max': 20, 'label': '10-20', 'color': '#81AE9F'},
    {'min': 20, 'max': 30, 'label': '20-30', 'color': '#E2C568'},
    {'min': 30, 'max': 50, 'label': '30-50', 'color': '#FCF84D'},
    {'min': 50, 'max': 100, 'label': '50-100', 'color': '#DD0200'},
    {'min': 100, 'max': 200, 'label': '100-200', 'color': '#DD675E'},
    {'min': 200, 'label': '200以上', 'color': '#D94E5D'}  # 有下限无上限
]
# is_piecewise 是否自定义分段, 变为true 才能生效
geo.set_global_opts(
    visualmap_opts=opts.VisualMapOpts(is_piecewise=True, pieces=pieces),
    title_opts=opts.TitleOpts(title="热力分布"),
)
# 渲染成html, 可用浏览器直接打开
geo.render('render.html')

效果图

总结

Pyecharts贼强大,我也只是看了一点自己需要使用的部分,后续需要慢慢摸索。