pyecharts是一个由百度开源的数据可视化库,具有良好的交互性,能够制作很多精巧的图表。其中该库的Bmap类能够调用百度地图,在百度地图上制作图表。
此次笔者就使用Bmap,根据某地景点的数据,制作该景点的客源分布图。
先上效果图:
说明
笔者使用的pyecharts版本是1.7.1,如果使用0.x版本不知道是否可行,因为两个版本代码差异较大。在绘制过程中可能会遇到一些问题,可以参考:
from pyecharts import options as opts报错问题以及解决办法
pyecharts 1.7.1手动安装
(所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置)解决办法
前期工作
由于使用Bmap类绘制地理图表时要调用百度地图,因此要先申请百度地图开发者AK。
首先注册百度账号,然后在打开百度开放平台,点击控制台,进入控制台页面,然后激活个人开发者账号,这样就可以使用该平台。
在控制台页面,点击应用管理——>我的应用——>创建应用,创建一个应用。
输入应用名称,应用类型选择浏览器端,在白名单中输入*,点击提交即可创建应用。
提交完成后在我的应用中即可看到所创建的应用,记住应用的AK值,使用该值调用百度地图的API。如图:
开始绘图
首先导入需要的包:
from pyecharts import options as opts
from pyecharts.charts import BMap,Geo
from pyecharts.faker import Faker
from pyecharts.commons.utils import JsCode
然后写.add_schema类:其中baidu_ak要写自己申请的AK值。
.add_schema(
baidu_ak="自己的AK值",
center=[104.114129, 37.550339], # 当前视角的中心点,用经纬度表示
zoom=5, # 当前视角的缩放比例
is_roam=True, # 是否开启鼠标缩放和平移漫游
)
接着写.add类,进行地图配置,其中formatter参数是标签内容格式器,其中formatter=’{a}‘可以显示系列名,formatter=’{b}‘可以显示数据名,formatter=’{c}‘可以显示数值数组,例如数据(北京,100),”北京”为数据名,“100”为数据值,但是如果使用formatter=’{c}’,显示的是一个数值数组[经度,纬度,数据值],而不是数据值本身。因此,此处使用回调函数将数据值进行显示。
.add(
type_="effectScatter", #涟漪效果
series_name="", #不使用的话,地图上方会有一个小点
data_pair=data,
symbol_size=10,
effect_opts=opts.EffectOpts(),
label_opts=opts.LabelOpts(
position="top", #标签位置
is_show=True, #is_show是否显示标签,点上面的内容
formatter=JsCode( #formatter为标签内容格式器{a}:系列名;{b}:数据名;{c}:数值数组也可以是回调函数
"""function(params) {
if ('value' in params.data) {
return params.data.value[2];
}
}"""
),#显示数据,可以去掉经纬度只显示数值return params.data.value[2] + ': ' + params.data.value[0]+': ' + params.data.value[1];
),
itemstyle_opts=opts.ItemStyleOpts(),
is_selected=True, #选中图例
)
接下来写.set_global_opts类进行全局配置,其中opts.VisualMapOpts可用来配置散点的大小和颜色随着数值进行变化。
.set_global_opts(
title_opts=opts.TitleOpts(
title="中新天津生态城游客客源分布图",
subtitle="(国庆节期间)",
pos_left="center",
title_textstyle_opts=opts.TextStyleOpts(color="#fff"), #文字样式配置
),
tooltip_opts=opts.TooltipOpts( #标签配置,选中某一个点显示的框
trigger="item", #触发类型,item主要用于散点图
formatter=JsCode( #显示提示框formatter为标签内容格式器{a}:系列名;{b}:数据名;{c}:数值数组也可以是回调函数
"""function(params) {
if ('value' in params.data) {
return params.data.name + '<br>' + params.data.value[2];
}
}"""
),#显示数据,可以去掉经纬度,只显示数值return params.data.value[2] + ': ' + params.data.value[0]+': ' + params.data.value[1];
),
visualmap_opts=opts.VisualMapOpts( #视觉映射配置
pos_top="10", #图例离顶部的距离
pos_left="10", #图例离左边边框的距离
type_ = "size", # 映射过渡类型,可选,"color", "size" (颜色映射还是大小映射)(重要!!!)
#其中color参数使点的颜色随着数值进行变化,size参数使点的